61 lines
1.2 KiB
Go
61 lines
1.2 KiB
Go
package slog
|
|
|
|
import (
|
|
"fmt"
|
|
"go.uber.org/zap"
|
|
"go.uber.org/zap/zapcore"
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
var log *zap.SugaredLogger
|
|
|
|
// Init initializes the logger
|
|
func Init() {
|
|
config := zap.NewProductionConfig()
|
|
|
|
// configure:
|
|
config.EncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
|
|
config.Level = zap.NewAtomicLevelAt(getEnvLogLevel())
|
|
|
|
logger, err := config.Build()
|
|
if err != nil {
|
|
panic(fmt.Errorf("error initializing logger: %v", err))
|
|
}
|
|
log = logger.Sugar()
|
|
}
|
|
|
|
// Get returns the global logger instance
|
|
func Get() *zap.SugaredLogger {
|
|
return log
|
|
}
|
|
|
|
// Sync flushes any buffered log entries
|
|
func Sync() error {
|
|
return log.Sync()
|
|
}
|
|
|
|
func getEnvLogLevel() zapcore.Level {
|
|
level, ok := os.LookupEnv("LOG_LEVEL")
|
|
if !ok {
|
|
return zapcore.InfoLevel
|
|
}
|
|
switch strings.ToLower(level) {
|
|
case "debug":
|
|
return zapcore.DebugLevel
|
|
case "info":
|
|
return zapcore.InfoLevel
|
|
case "warn":
|
|
return zapcore.WarnLevel
|
|
case "error":
|
|
return zapcore.ErrorLevel
|
|
case "panic":
|
|
return zapcore.PanicLevel
|
|
case "fatal":
|
|
return zapcore.FatalLevel
|
|
default:
|
|
fmt.Printf("Unrecognised 'LOG_LEVEL' environment variable '%s', using 'info'\n", level)
|
|
return zapcore.InfoLevel
|
|
}
|
|
}
|