| package logger |
| |
| import ( |
| "io" |
| "os" |
| "time" |
| |
| "github.com/korap/korap-mcp/config" |
| "github.com/rs/zerolog" |
| ) |
| |
| // SetupLogger configures zerolog based on the provided configuration |
| func SetupLogger(cfg *config.LoggingConfig) (zerolog.Logger, error) { |
| // Set global log level |
| level, err := zerolog.ParseLevel(cfg.Level) |
| if err != nil { |
| return zerolog.Logger{}, err |
| } |
| zerolog.SetGlobalLevel(level) |
| |
| // Determine output destination |
| var output io.Writer |
| if cfg.File != "" { |
| file, err := os.OpenFile(cfg.File, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644) |
| if err != nil { |
| return zerolog.Logger{}, err |
| } |
| output = file |
| } else { |
| output = os.Stdout |
| } |
| |
| // Configure output format |
| var logger zerolog.Logger |
| if cfg.Format == "json" { |
| logger = zerolog.New(output).With().Timestamp().Logger() |
| } else { |
| // Text format with console writer for better readability |
| consoleWriter := zerolog.ConsoleWriter{ |
| Out: output, |
| TimeFormat: time.RFC3339, |
| } |
| logger = zerolog.New(consoleWriter).With().Timestamp().Logger() |
| } |
| |
| return logger, nil |
| } |
| |
| // GetLogger returns a configured logger instance |
| func GetLogger(cfg *config.LoggingConfig) zerolog.Logger { |
| logger, err := SetupLogger(cfg) |
| if err != nil { |
| // Fallback to default logger if setup fails |
| return zerolog.New(os.Stderr).With().Timestamp().Logger() |
| } |
| return logger |
| } |