59 lines
1.5 KiB
Go
59 lines
1.5 KiB
Go
// Package logging provides centralized structured logging using slog
|
|
// with configurable log levels. Call InitLogger() from main() to configure.
|
|
package logging
|
|
|
|
import (
|
|
"io"
|
|
"log/slog"
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
// InitLogger initializes the global slog default logger with the specified log level.
|
|
// Valid levels: debug, info, warn, error (case-insensitive)
|
|
// If level is empty or invalid, defaults to INFO.
|
|
// Call this from main() at startup.
|
|
func InitLogger(level string) {
|
|
var logLevel slog.Level
|
|
|
|
switch strings.ToLower(strings.TrimSpace(level)) {
|
|
case "debug":
|
|
logLevel = slog.LevelDebug
|
|
case "info", "":
|
|
logLevel = slog.LevelInfo
|
|
case "warn", "warning":
|
|
logLevel = slog.LevelWarn
|
|
case "error":
|
|
logLevel = slog.LevelError
|
|
default:
|
|
logLevel = slog.LevelInfo
|
|
}
|
|
|
|
opts := &slog.HandlerOptions{
|
|
Level: logLevel,
|
|
}
|
|
|
|
handler := slog.NewTextHandler(os.Stdout, opts)
|
|
slog.SetDefault(slog.New(handler))
|
|
}
|
|
|
|
// SetupTestLogger configures logging for tests to reduce noise.
|
|
// Sets log level to WARN and outputs to io.Discard to suppress DEBUG and INFO messages.
|
|
// Returns a cleanup function that should be called when the test completes (use t.Cleanup).
|
|
func SetupTestLogger() func() {
|
|
// Save original logger to restore later
|
|
originalLogger := slog.Default()
|
|
|
|
// Set level to WARN and discard output to silence tests
|
|
opts := &slog.HandlerOptions{
|
|
Level: slog.LevelWarn,
|
|
}
|
|
handler := slog.NewTextHandler(io.Discard, opts)
|
|
slog.SetDefault(slog.New(handler))
|
|
|
|
// Return cleanup function
|
|
return func() {
|
|
slog.SetDefault(originalLogger)
|
|
}
|
|
}
|