mirror of
https://github.com/EZ-Api/ez-api.git
synced 2026-01-13 17:47:51 +00:00
refactor(log): migrate from zerolog to structured slog with bridge
- Replace direct zerolog usage with standard library `log/slog` in business code - Add `internal/logging` package with zerolog bridge handler for structured output - Create `internal/jsoncodec` package to centralize JSON encoding/decoding using Sonic - Update all services and main entry point to use new logging interface - Maintain backward compatibility with existing zerolog console output - Remove custom logger setup in favor of structured logging bridge
This commit is contained in:
63
internal/logging/logging.go
Normal file
63
internal/logging/logging.go
Normal file
@@ -0,0 +1,63 @@
|
||||
package logging
|
||||
|
||||
import (
|
||||
"log/slog"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/rs/zerolog"
|
||||
)
|
||||
|
||||
type Options struct {
|
||||
Service string
|
||||
}
|
||||
|
||||
func New(opts Options) (*slog.Logger, zerolog.Logger) {
|
||||
level := parseLevel(strings.TrimSpace(os.Getenv("EZ_LOG_LEVEL")))
|
||||
zerolog.SetGlobalLevel(toZerologLevel(level))
|
||||
|
||||
output := zerolog.ConsoleWriter{
|
||||
Out: os.Stdout,
|
||||
TimeFormat: time.RFC3339,
|
||||
}
|
||||
|
||||
zl := zerolog.New(output).
|
||||
Level(toZerologLevel(level)).
|
||||
With().
|
||||
Timestamp().
|
||||
Str("service", strings.TrimSpace(opts.Service)).
|
||||
Logger()
|
||||
|
||||
sl := slog.New(NewZerologHandler(zl, level))
|
||||
slog.SetDefault(sl)
|
||||
return sl, zl
|
||||
}
|
||||
|
||||
func parseLevel(raw string) slog.Level {
|
||||
switch strings.ToLower(raw) {
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
func toZerologLevel(level slog.Level) zerolog.Level {
|
||||
switch {
|
||||
case level <= slog.LevelDebug:
|
||||
return zerolog.DebugLevel
|
||||
case level <= slog.LevelInfo:
|
||||
return zerolog.InfoLevel
|
||||
case level <= slog.LevelWarn:
|
||||
return zerolog.WarnLevel
|
||||
default:
|
||||
return zerolog.ErrorLevel
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user