60 lines
No EOL
1.3 KiB
Go
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()
|
|
} |