rss2/backend/internal/logger/logger.go
2026-08-28 21:10:02 +02:00

60 lines
No EOL
1.3 KiB
Go

package logger
import (
"os"
"time"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
)
var Logger zerolog.Logger
func Init(serviceName, level string) {
zerolog.TimeFieldFormat = zerolog.TimeFormatUnixMs
zerolog.CallerMarshalFunc = func(pc uintptr, file string, line int) string {
short := file
for i := len(file) - 1; i > 0; i-- {
if file[i] == '/' {
short = file[i+1:]
break
}
}
return short + ":" + string(rune(line))
}
output := zerolog.ConsoleWriter{Out: os.Stdout, TimeFormat: time.RFC3339, NoColor: false}
logger := zerolog.New(output).With().Timestamp().Caller().Str("service", serviceName).Logger()
switch level {
case "debug":
logger = logger.Level(zerolog.DebugLevel)
case "info":
logger = logger.Level(zerolog.InfoLevel)
case "warn":
logger = logger.Level(zerolog.WarnLevel)
case "error":
logger = logger.Level(zerolog.ErrorLevel)
default:
logger = logger.Level(zerolog.InfoLevel)
}
Logger = logger
log.Logger = logger
}
func GetLogger() zerolog.Logger {
return Logger
}
func WithRequestID(requestID string) zerolog.Logger {
return Logger.With().Str("request_id", requestID).Logger()
}
func WithFields(fields map[string]interface{}) zerolog.Logger {
ctx := Logger.With()
for k, v := range fields {
ctx = ctx.Interface(k, v)
}
return ctx.Logger()
}