60 lines
1.6 KiB
Go
60 lines
1.6 KiB
Go
package logging
|
|
|
|
import (
|
|
"log/slog"
|
|
"os"
|
|
)
|
|
|
|
// Logger interface allows users to plug in their own logger
|
|
type Logger interface {
|
|
Debug(msg string, args ...any)
|
|
Info(msg string, args ...any)
|
|
Warn(msg string, args ...any)
|
|
Error(msg string, args ...any)
|
|
}
|
|
|
|
var defaultLogger Logger = &slogLogger{logger: slog.Default()}
|
|
|
|
// SetLogger allows users to plug in their own logger
|
|
func SetLogger(l Logger) {
|
|
defaultLogger = l
|
|
}
|
|
|
|
// Init initializes the default slog logger with a specific log level
|
|
func Init(level string) {
|
|
var slogLevel slog.Level
|
|
switch level {
|
|
case "debug":
|
|
slogLevel = slog.LevelDebug
|
|
case "info":
|
|
slogLevel = slog.LevelInfo
|
|
case "warn":
|
|
slogLevel = slog.LevelWarn
|
|
case "error":
|
|
slogLevel = slog.LevelError
|
|
default:
|
|
slogLevel = slog.LevelInfo
|
|
}
|
|
|
|
handler := slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{
|
|
Level: slogLevel,
|
|
})
|
|
defaultLogger = &slogLogger{logger: slog.New(handler)}
|
|
}
|
|
|
|
// Default slog implementation
|
|
type slogLogger struct {
|
|
logger *slog.Logger
|
|
}
|
|
|
|
func (s *slogLogger) Debug(msg string, args ...any) { s.logger.Debug(msg, args...) }
|
|
func (s *slogLogger) Info(msg string, args ...any) { s.logger.Info(msg, args...) }
|
|
func (s *slogLogger) Warn(msg string, args ...any) { s.logger.Warn(msg, args...) }
|
|
func (s *slogLogger) Error(msg string, args ...any) { s.logger.Error(msg, args...) }
|
|
|
|
// Package-level functions for convenience
|
|
func Debug(msg string, args ...any) { defaultLogger.Debug(msg, args...) }
|
|
func Info(msg string, args ...any) { defaultLogger.Info(msg, args...) }
|
|
func Warn(msg string, args ...any) { defaultLogger.Warn(msg, args...) }
|
|
func Error(msg string, args ...any) { defaultLogger.Error(msg, args...) }
|