futriis/pkg/utils/logger.go

70 lines
2.3 KiB
Go
Raw Normal View History

2026-02-27 22:04:04 +03:00
// /futriis/pkg/utils/logger.go
// Пакет utils предоставляет функции для логирования работы СУБД Futriis.
// Реализует запись логов в файл с временными метками, включающими миллисекунды,
// и уровнями логирования (INFO, ERROR, WARNING, CMD). Логгер используется для
// отслеживания операций, отладки и аудита команд.
package utils
import (
"fmt"
"os"
"time"
)
// Logger представляет структуру для логирования в файл
type FileLogger struct {
file *os.File
}
var fileLoggerInstance *FileLogger
// InitFileLogger инициализирует файловый логгер с указанным путём к файлу
func InitFileLogger(logFile string) error {
// Создаём директорию для логов, если она не существует
logDir := "/home/grigoriy/futriis/logs"
if err := os.MkdirAll(logDir, 0755); err != nil {
return fmt.Errorf("не удалось создать директорию для логов: %v", err)
}
file, err := os.OpenFile(logFile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
return err
}
fileLoggerInstance = &FileLogger{
file: file,
}
// Записываем начало сессии
fileLoggerInstance.Log("INFO", "Сессия начата")
return nil
}
// GetFileLogger возвращает экземпляр файлового логгера
func GetFileLogger() *FileLogger {
return fileLoggerInstance
}
// Log записывает сообщение в файл лога с миллисекундами
func (l *FileLogger) Log(level, message string) {
if l == nil || l.file == nil {
return
}
// Формат времени с миллисекундами: 2006-01-02 15:04:05.000
timestamp := time.Now().Format("2006-01-02 15:04:05.000")
logLine := fmt.Sprintf("[%s] %s: %s\n", timestamp, level, message)
l.file.WriteString(logLine)
}
// Close закрывает файл лога
func (l *FileLogger) Close() {
if l != nil && l.file != nil {
// Записываем конец сессии
l.Log("INFO", "Сессия завершена")
l.file.Close()
}
}