Initial minimal mcp server for KorAP
diff --git a/logger/logger.go b/logger/logger.go
new file mode 100644
index 0000000..2d58030
--- /dev/null
+++ b/logger/logger.go
@@ -0,0 +1,57 @@
+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
+}