56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
package config
|
|
|
|
import (
|
|
"log/slog"
|
|
"os"
|
|
|
|
"github.com/rs/zerolog"
|
|
slogzerolog "github.com/samber/slog-zerolog"
|
|
"github.com/scmhub/ibapi"
|
|
)
|
|
|
|
// SetupLogger creates a logger based on the config and sets up ibapi logging
|
|
func (c *Config) SetupLogger() *slog.Logger {
|
|
// Parse log level
|
|
logLevel := parseLogLevel(c.LogLevel)
|
|
|
|
// Create shared zerolog logger with config level
|
|
zerolog.SetGlobalLevel(slogToZerologLevel(logLevel))
|
|
zerologLogger := zerolog.New(os.Stdout).With().Timestamp().Logger()
|
|
|
|
// Set it for ibapi
|
|
ibapi.SetLogger(zerologLogger)
|
|
|
|
// Use it as backend for slog
|
|
return slog.New(slogzerolog.Option{
|
|
Level: logLevel,
|
|
Logger: &zerologLogger,
|
|
}.NewZerologHandler())
|
|
}
|
|
|
|
func parseLogLevel(level string) slog.Level {
|
|
switch level {
|
|
case "debug":
|
|
return slog.LevelDebug
|
|
case "warn":
|
|
return slog.LevelWarn
|
|
case "error":
|
|
return slog.LevelError
|
|
default:
|
|
return slog.LevelInfo
|
|
}
|
|
}
|
|
|
|
func slogToZerologLevel(level slog.Level) zerolog.Level {
|
|
switch level {
|
|
case slog.LevelDebug:
|
|
return zerolog.DebugLevel
|
|
case slog.LevelWarn:
|
|
return zerolog.WarnLevel
|
|
case slog.LevelError:
|
|
return zerolog.ErrorLevel
|
|
default:
|
|
return zerolog.InfoLevel
|
|
}
|
|
}
|