blob: 2d5803044dd23230e27e4fb4cba6f71bf425085f [file] [log] [blame]
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
}