blob: 2d5803044dd23230e27e4fb4cba6f71bf425085f [file] [log] [blame]
Akron90f65212025-06-12 14:32:55 +02001package logger
2
3import (
4 "io"
5 "os"
6 "time"
7
8 "github.com/korap/korap-mcp/config"
9 "github.com/rs/zerolog"
10)
11
12// SetupLogger configures zerolog based on the provided configuration
13func SetupLogger(cfg *config.LoggingConfig) (zerolog.Logger, error) {
14 // Set global log level
15 level, err := zerolog.ParseLevel(cfg.Level)
16 if err != nil {
17 return zerolog.Logger{}, err
18 }
19 zerolog.SetGlobalLevel(level)
20
21 // Determine output destination
22 var output io.Writer
23 if cfg.File != "" {
24 file, err := os.OpenFile(cfg.File, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
25 if err != nil {
26 return zerolog.Logger{}, err
27 }
28 output = file
29 } else {
30 output = os.Stdout
31 }
32
33 // Configure output format
34 var logger zerolog.Logger
35 if cfg.Format == "json" {
36 logger = zerolog.New(output).With().Timestamp().Logger()
37 } else {
38 // Text format with console writer for better readability
39 consoleWriter := zerolog.ConsoleWriter{
40 Out: output,
41 TimeFormat: time.RFC3339,
42 }
43 logger = zerolog.New(consoleWriter).With().Timestamp().Logger()
44 }
45
46 return logger, nil
47}
48
49// GetLogger returns a configured logger instance
50func GetLogger(cfg *config.LoggingConfig) zerolog.Logger {
51 logger, err := SetupLogger(cfg)
52 if err != nil {
53 // Fallback to default logger if setup fails
54 return zerolog.New(os.Stderr).With().Timestamp().Logger()
55 }
56 return logger
57}