70 lines
2.3 KiB
Go
70 lines
2.3 KiB
Go
|
|
// /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()
|
|||
|
|
}
|
|||
|
|
}
|