mirror of
https://github.com/Noooste/garage-ui.git
synced 2026-07-26 15:58:13 +00:00
8f81c7ffea
Signed-off-by: Noste <83548733+Noooste@users.noreply.github.com>
121 lines
2.3 KiB
Go
121 lines
2.3 KiB
Go
package logger
|
|
|
|
import (
|
|
"io"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/rs/zerolog"
|
|
"github.com/rs/zerolog/log"
|
|
)
|
|
|
|
// Logger is a wrapper around zerolog.Logger
|
|
type Logger struct {
|
|
zerolog.Logger
|
|
}
|
|
|
|
var (
|
|
// Global logger instance
|
|
globalLogger *Logger
|
|
)
|
|
|
|
// Config holds logger configuration
|
|
type Config struct {
|
|
Level string // debug, info, warn, error
|
|
Format string // json, text
|
|
}
|
|
|
|
// Init initializes the global logger with the given configuration
|
|
func Init(cfg Config) {
|
|
var output io.Writer = os.Stdout
|
|
|
|
// Set up console output for text format
|
|
if cfg.Format == "text" {
|
|
output = zerolog.ConsoleWriter{
|
|
Out: os.Stdout,
|
|
TimeFormat: time.RFC3339,
|
|
NoColor: false,
|
|
}
|
|
}
|
|
|
|
// Parse log level
|
|
level := zerolog.InfoLevel
|
|
switch cfg.Level {
|
|
case "debug":
|
|
level = zerolog.DebugLevel
|
|
case "info":
|
|
level = zerolog.InfoLevel
|
|
case "warn":
|
|
level = zerolog.WarnLevel
|
|
case "error":
|
|
level = zerolog.ErrorLevel
|
|
}
|
|
|
|
// Create logger
|
|
logger := zerolog.New(output).
|
|
Level(level).
|
|
With().
|
|
Timestamp().
|
|
Caller().
|
|
Logger()
|
|
|
|
globalLogger = &Logger{logger}
|
|
log.Logger = logger
|
|
}
|
|
|
|
// Get returns the global logger instance
|
|
func Get() *Logger {
|
|
if globalLogger == nil {
|
|
// Initialize with defaults if not initialized
|
|
Init(Config{
|
|
Level: "info",
|
|
Format: "text",
|
|
})
|
|
}
|
|
return globalLogger
|
|
}
|
|
|
|
// Debug logs a debug message
|
|
func Debug() *zerolog.Event {
|
|
return Get().Debug()
|
|
}
|
|
|
|
// Info logs an info message
|
|
func Info() *zerolog.Event {
|
|
return Get().Info()
|
|
}
|
|
|
|
// Warn logs a warning message
|
|
func Warn() *zerolog.Event {
|
|
return Get().Warn()
|
|
}
|
|
|
|
// Error logs an error message
|
|
func Error() *zerolog.Event {
|
|
return Get().Error()
|
|
}
|
|
|
|
// Fatal logs a fatal message and exits
|
|
func Fatal() *zerolog.Event {
|
|
return Get().Fatal()
|
|
}
|
|
|
|
// WithContext creates a new logger with additional context fields
|
|
func (l *Logger) WithContext(fields map[string]interface{}) *Logger {
|
|
ctx := l.Logger.With()
|
|
for k, v := range fields {
|
|
ctx = ctx.Interface(k, v)
|
|
}
|
|
return &Logger{ctx.Logger()}
|
|
}
|
|
|
|
// WithComponent creates a logger with a component field
|
|
func WithComponent(component string) *Logger {
|
|
return &Logger{Get().With().Str("component", component).Logger()}
|
|
}
|
|
|
|
// WithError creates a logger with an error field
|
|
func WithError(err error) *zerolog.Event {
|
|
return Get().Error().Err(err)
|
|
}
|