Files
gohoarder/pkg/logger/logger.go
T
2026-01-02 04:02:02 +00:00

58 lines
1.3 KiB
Go

package logger
import (
"os"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
)
// Config contains logger configuration
type Config struct {
Level string // debug, info, warn, error
Format string // json, pretty
}
// Init initializes the global logger
func Init(cfg Config) error {
// Set log level
level, err := zerolog.ParseLevel(cfg.Level)
if err != nil {
level = zerolog.InfoLevel
}
zerolog.SetGlobalLevel(level)
// Set time format
zerolog.TimeFieldFormat = zerolog.TimeFormatUnixMs
// Set format
if cfg.Format == "pretty" {
log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stdout, TimeFormat: "15:04:05.000"})
} else {
// JSON format (default for production)
log.Logger = zerolog.New(os.Stdout).With().Timestamp().Logger()
}
return nil
}
// Get returns the global logger
func Get() *zerolog.Logger {
return &log.Logger
}
// WithFields returns a logger with additional fields
func WithFields(fields map[string]interface{}) *zerolog.Logger {
logger := log.Logger
for k, v := range fields {
logger = logger.With().Interface(k, v).Logger()
}
return &logger
}
// WithRequestID returns a logger with request ID
func WithRequestID(requestID string) *zerolog.Logger {
logger := log.With().Str("request_id", requestID).Logger()
return &logger
}