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