69 lines
1.7 KiB
Go
69 lines
1.7 KiB
Go
package logger
|
||
|
||
import (
|
||
"log/slog"
|
||
"os"
|
||
"strings"
|
||
"yobble-gateway-go/internal/config"
|
||
|
||
"github.com/lmittmann/tint"
|
||
)
|
||
|
||
var defaultLogger *slog.Logger
|
||
|
||
// InitLogger инициализирует логгер slog по умолчанию на основе предоставленного уровня и формата.
|
||
func InitLogger(cfg *config.LogConfig) *slog.Logger {
|
||
var level slog.Level
|
||
switch strings.ToLower(cfg.Level) {
|
||
case "debug":
|
||
level = slog.LevelDebug
|
||
case "info":
|
||
level = slog.LevelInfo
|
||
case "warn":
|
||
level = slog.LevelWarn
|
||
case "error":
|
||
level = slog.LevelError
|
||
default:
|
||
level = slog.LevelInfo
|
||
}
|
||
|
||
var handler slog.Handler
|
||
output := os.Stdout
|
||
|
||
switch strings.ToLower(cfg.Format) {
|
||
case "json":
|
||
handler = slog.NewJSONHandler(output, &slog.HandlerOptions{
|
||
Level: level,
|
||
})
|
||
case "text":
|
||
handler = tint.NewHandler(output, &tint.Options{
|
||
Level: level,
|
||
TimeFormat: "15:04:05", // HH:MM:SS
|
||
AddSource: false, // Optional: set to true to add file:line
|
||
})
|
||
default:
|
||
handler = tint.NewHandler(output, &tint.Options{
|
||
Level: level,
|
||
TimeFormat: "15:04:05",
|
||
AddSource: false,
|
||
}) // Default to colored Text if unknown
|
||
}
|
||
|
||
defaultLogger = slog.New(handler)
|
||
slog.SetDefault(defaultLogger)
|
||
return defaultLogger
|
||
}
|
||
|
||
// NewLoggerWithOp создает новый экземпляр логгера с установленным полем "op".
|
||
func NewLoggerWithOp(op string) *slog.Logger {
|
||
if defaultLogger == nil {
|
||
// Fallback if InitLogger was not called, though it should be.
|
||
logConfig := config.LogConfig{
|
||
Level: "info",
|
||
Format: "text",
|
||
}
|
||
defaultLogger = InitLogger(&logConfig)
|
||
}
|
||
return defaultLogger.With(slog.String("op", op))
|
||
}
|