91 lines
1.7 KiB
Go
91 lines
1.7 KiB
Go
package logger
|
|
|
|
import (
|
|
"io"
|
|
"log/slog"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/lmittmann/tint"
|
|
)
|
|
|
|
var (
|
|
// Default logger is a tinted logger that writes to stdout
|
|
defaultLogger *slog.Logger
|
|
|
|
// Debug flag controls verbose logging
|
|
debugMode bool
|
|
)
|
|
|
|
// Init initializes the global logger with the specified debug level
|
|
func Init(debug bool) {
|
|
debugMode = debug
|
|
|
|
// Set the minimum log level based on debug mode
|
|
level := slog.LevelInfo
|
|
if debug {
|
|
level = slog.LevelDebug
|
|
}
|
|
|
|
// Create a tinted logger with time, level, and source
|
|
defaultLogger = slog.New(
|
|
tint.NewHandler(os.Stdout, &tint.Options{
|
|
Level: level,
|
|
TimeFormat: time.RFC3339,
|
|
AddSource: debug,
|
|
}),
|
|
)
|
|
|
|
// Set the default slog logger
|
|
slog.SetDefault(defaultLogger)
|
|
}
|
|
|
|
// InitWithWriter initializes the logger with a custom writer (useful for testing)
|
|
func InitWithWriter(w io.Writer, debug bool) {
|
|
debugMode = debug
|
|
|
|
level := slog.LevelInfo
|
|
if debug {
|
|
level = slog.LevelDebug
|
|
}
|
|
|
|
defaultLogger = slog.New(
|
|
tint.NewHandler(w, &tint.Options{
|
|
Level: level,
|
|
TimeFormat: time.RFC3339,
|
|
AddSource: debug,
|
|
}),
|
|
)
|
|
|
|
slog.SetDefault(defaultLogger)
|
|
}
|
|
|
|
// IsDebug returns true if debug mode is enabled
|
|
func IsDebug() bool {
|
|
return debugMode
|
|
}
|
|
|
|
// Debug logs a message at debug level
|
|
func Debug(msg string, args ...any) {
|
|
slog.Debug(msg, args...)
|
|
}
|
|
|
|
// Info logs a message at info level
|
|
func Info(msg string, args ...any) {
|
|
slog.Info(msg, args...)
|
|
}
|
|
|
|
// Warn logs a message at warn level
|
|
func Warn(msg string, args ...any) {
|
|
slog.Warn(msg, args...)
|
|
}
|
|
|
|
// Error logs a message at error level
|
|
func Error(msg string, args ...any) {
|
|
slog.Error(msg, args...)
|
|
}
|
|
|
|
// With returns a new logger with the given attributes
|
|
func With(args ...any) *slog.Logger {
|
|
return slog.With(args...)
|
|
}
|