// /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() } }