Files
bc-netts-energy/internal/logger/logger.go
2025-11-03 19:26:48 +08:00

50 lines
980 B
Go

package logger
import (
"log/slog"
"os"
"strings"
"time"
)
// New builds a slog.Logger based on level and format configuration.
func New(level, format string) *slog.Logger {
slogLevel := parseLevel(level)
var handler slog.Handler
opts := &slog.HandlerOptions{
Level: slogLevel,
AddSource: true,
ReplaceAttr: func(groups []string, a slog.Attr) slog.Attr {
if a.Key == slog.TimeKey {
a.Value = slog.StringValue(time.Now().UTC().Format(time.RFC3339Nano))
}
return a
},
}
switch strings.ToLower(format) {
case "json":
handler = slog.NewJSONHandler(os.Stdout, opts)
default:
handler = slog.NewTextHandler(os.Stdout, opts)
}
return slog.New(handler)
}
func parseLevel(level string) slog.Level {
switch strings.ToLower(level) {
case "debug":
return slog.LevelDebug
case "warn", "warning":
return slog.LevelWarn
case "error":
return slog.LevelError
case "info", "":
return slog.LevelInfo
default:
return slog.LevelInfo
}
}