futriis/pkg/utils/logger.go
2026-02-27 22:04:04 +03:00

70 lines
2.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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