mirror of
https://github.com/EZ-Api/ez-api.git
synced 2026-01-13 17:47:51 +00:00
- 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
64 lines
1.2 KiB
Go
64 lines
1.2 KiB
Go
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
|
|
}
|
|
}
|