2025-07-11 04:42:49 +07:00

69 lines
1.7 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.

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