package logger import ( "io" "os" "strings" "time" "github.com/rs/zerolog" "github.com/rs/zerolog/pkgerrors" ) var Log zerolog.Logger type Config struct { Level string Environment string } func Init(config Config) { zerolog.ErrorStackMarshaler = pkgerrors.MarshalStack zerolog.TimeFieldFormat = time.RFC3339 level := parseLogLevel(config.Level) zerolog.SetGlobalLevel(level) var output io.Writer = os.Stdout if config.Environment == "development" { output = zerolog.ConsoleWriter{ Out: os.Stdout, TimeFormat: "15:04:05", NoColor: false, } } Log = zerolog.New(output). With(). Timestamp(). Caller(). Logger() Log.Info(). Str("level", level.String()). Str("environment", config.Environment). Msg("Logger initialized") } func parseLogLevel(level string) zerolog.Level { switch strings.ToLower(level) { case "debug": return zerolog.DebugLevel case "info": return zerolog.InfoLevel case "warn", "warning": return zerolog.WarnLevel case "error": return zerolog.ErrorLevel case "fatal": return zerolog.FatalLevel case "panic": return zerolog.PanicLevel default: return zerolog.InfoLevel } } func Debug() *zerolog.Event { return Log.Debug() } func Info() *zerolog.Event { return Log.Info() } func Warn() *zerolog.Event { return Log.Warn() } func Error() *zerolog.Event { return Log.Error() } func Fatal() *zerolog.Event { return Log.Fatal() } func With() zerolog.Context { return Log.With() }