chore: add logger for push notifications
This commit is contained in:
+33
-7
@@ -12,8 +12,39 @@ import (
|
||||
"github.com/prabhupadasays/spsays-bff/internal/config"
|
||||
"github.com/prabhupadasays/spsays-bff/internal/server"
|
||||
"go.uber.org/zap"
|
||||
"go.uber.org/zap/zapcore"
|
||||
)
|
||||
|
||||
// newLogger builds the app logger, routing logs by level: Debug/Info/Warn go
|
||||
// to stdout and only Error/Fatal/Panic go to stderr. Hosting platforms tag
|
||||
// every stderr line as "error", so without this split a routine Debug/Info
|
||||
// line shows up with a misleading error badge. Production uses JSON at Info+;
|
||||
// development uses colored console at Debug+.
|
||||
func newLogger(production bool) *zap.Logger {
|
||||
var encoder zapcore.Encoder
|
||||
minLevel := zapcore.DebugLevel
|
||||
if production {
|
||||
encoder = zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig())
|
||||
minLevel = zapcore.InfoLevel
|
||||
} else {
|
||||
encCfg := zap.NewDevelopmentEncoderConfig()
|
||||
encCfg.EncodeLevel = zapcore.CapitalColorLevelEncoder
|
||||
encoder = zapcore.NewConsoleEncoder(encCfg)
|
||||
}
|
||||
|
||||
low := zap.LevelEnablerFunc(func(l zapcore.Level) bool {
|
||||
return l >= minLevel && l < zapcore.ErrorLevel
|
||||
})
|
||||
high := zap.LevelEnablerFunc(func(l zapcore.Level) bool {
|
||||
return l >= zapcore.ErrorLevel
|
||||
})
|
||||
core := zapcore.NewTee(
|
||||
zapcore.NewCore(encoder, zapcore.Lock(os.Stdout), low),
|
||||
zapcore.NewCore(encoder, zapcore.Lock(os.Stderr), high),
|
||||
)
|
||||
return zap.New(core, zap.AddCaller(), zap.AddStacktrace(zapcore.ErrorLevel))
|
||||
}
|
||||
|
||||
func main() {
|
||||
// Load config
|
||||
cfg, err := config.Load()
|
||||
@@ -22,13 +53,8 @@ func main() {
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
// Initialize logger
|
||||
var logger *zap.Logger
|
||||
if cfg.Env == "production" {
|
||||
logger, _ = zap.NewProduction()
|
||||
} else {
|
||||
logger, _ = zap.NewDevelopment()
|
||||
}
|
||||
// Initialize logger — routes normal logs to stdout, errors to stderr.
|
||||
logger := newLogger(cfg.Env == "production")
|
||||
defer logger.Sync()
|
||||
|
||||
sugar := logger.Sugar()
|
||||
|
||||
Reference in New Issue
Block a user