Files
lemma/server/internal/logging/logger.go
2024-12-14 23:59:28 +01:00

75 lines
1.5 KiB
Go

// Package logging provides a simple logging interface for the server.
package logging
import (
"log/slog"
"os"
)
// Logger is the global logger instance
var Logger *slog.Logger
// LogLevel represents the log level
type LogLevel slog.Level
// Log levels
const (
DEBUG LogLevel = LogLevel(slog.LevelDebug)
INFO LogLevel = LogLevel(slog.LevelInfo)
WARN LogLevel = LogLevel(slog.LevelWarn)
ERROR LogLevel = LogLevel(slog.LevelError)
)
// Setup initializes the logger with the given minimum log level
func Setup(minLevel LogLevel) {
opts := &slog.HandlerOptions{
Level: slog.Level(minLevel),
}
Logger = slog.New(slog.NewTextHandler(os.Stdout, opts))
}
// ParseLogLevel converts a string to a LogLevel
func ParseLogLevel(level string) LogLevel {
switch level {
case "debug":
return DEBUG
case "warn":
return WARN
case "error":
return ERROR
default:
return INFO
}
}
// Debug logs a debug message
func Debug(msg string, args ...any) {
Logger.Debug(msg, args...)
}
// Info logs an info message
func Info(msg string, args ...any) {
Logger.Info(msg, args...)
}
// Warn logs a warning message
func Warn(msg string, args ...any) {
Logger.Warn(msg, args...)
}
// Error logs an error message
func Error(msg string, args ...any) {
Logger.Error(msg, args...)
}
// WithGroup adds a group to the logger context
func WithGroup(name string) *slog.Logger {
return Logger.WithGroup(name)
}
// With adds key-value pairs to the logger context
func With(args ...any) *slog.Logger {
return Logger.With(args...)
}