log: allow setting log level dynamically
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
leo 2023-04-28 23:01:35 +02:00
parent 6bd3b2845b
commit 9b22ec35ee
Signed by: wanderer
SSH Key Fingerprint: SHA256:Dp8+iwKHSlrMEHzE3bJnPng70I7LEsa3IJXRH/U+idQ

View File

@ -11,17 +11,30 @@ type Logger struct {
*slog.Logger
}
const (
LevelInfo int = iota
LevelDebug
LevelWarn
LevelError
)
var logger *Logger
var opts slog.HandlerOptions
func GetLogger() *Logger {
return logger
}
func Init(jsonHandler bool) *Logger {
opts = slog.HandlerOptions{
Level: slog.LevelInfo,
}
if jsonHandler {
logger = &Logger{slog.New(slog.NewJSONHandler(os.Stderr))}
logger = &Logger{slog.New(opts.NewJSONHandler(os.Stderr))}
} else {
logger = &Logger{slog.New(slog.NewTextHandler(os.Stderr))}
logger = &Logger{slog.New(opts.NewTextHandler(os.Stderr))}
}
logger.Info("slog logger initialised")
@ -29,6 +42,32 @@ func Init(jsonHandler bool) *Logger {
return logger
}
// SetLevel allows setting log level and returns the pointer to the re-created
// logger.
func SetLevel(level int) *Logger {
switch level {
case LevelInfo:
opts.Level = slog.LevelInfo
case LevelDebug:
opts.Level = slog.LevelDebug
case LevelWarn:
opts.Level = slog.LevelWarn
case LevelError:
opts.Level = slog.LevelError
}
if _, ok := logger.Handler().(*slog.JSONHandler); ok {
logger = &Logger{slog.New(opts.NewJSONHandler(os.Stderr))}
} else {
logger = &Logger{slog.New(opts.NewTextHandler(os.Stderr))}
}
return logger
}
func (l *Logger) Debugf(msg string, args ...any) {
l.Debug(fmt.Sprintf(msg, args...))
}