logger/adapters/zerolog/zerolog.go

233 lines
5.4 KiB
Go

package zerolog
import (
"fmt"
"time"
"github.com/rs/zerolog"
"go.arsenm.dev/logger"
)
var _ logger.Logger = &ZerologLogger{}
var _ logger.LogBuilder = &ZerologLogBuilder{}
type ZerologLogger struct {
logger zerolog.Logger
}
func New(z zerolog.Logger) *ZerologLogger {
return &ZerologLogger{z}
}
// NoPanic is a no-op because Zerolog does not provide this functionality
func (l *ZerologLogger) NoPanic() {}
// NoPanic is a no-op because Zerolog does not provide this functionality
func (l *ZerologLogger) NoExit() {}
// SetLevel sets the log level of the logger.
func (l *ZerologLogger) SetLevel(level logger.LogLevel) {
switch level {
case logger.LogLevelDebug:
l.logger = l.logger.Level(zerolog.DebugLevel)
case logger.LogLevelInfo:
l.logger = l.logger.Level(zerolog.InfoLevel)
case logger.LogLevelWarn:
l.logger = l.logger.Level(zerolog.WarnLevel)
case logger.LogLevelError:
l.logger = l.logger.Level(zerolog.ErrorLevel)
case logger.LogLevelFatal:
l.logger = l.logger.Level(zerolog.FatalLevel)
case logger.LogLevelPanic:
l.logger = l.logger.Level(zerolog.PanicLevel)
}
}
func (l *ZerologLogger) Debug(msg string) logger.LogBuilder {
return &ZerologLogBuilder{
logEvent: l.logger.Debug(),
msg: msg,
}
}
func (l *ZerologLogger) Debugf(format string, a ...any) logger.LogBuilder {
return &ZerologLogBuilder{
logEvent: l.logger.Debug(),
msg: fmt.Sprintf(format, a...),
}
}
func (l *ZerologLogger) Info(msg string) logger.LogBuilder {
return &ZerologLogBuilder{
logEvent: l.logger.Info(),
msg: msg,
}
}
func (l *ZerologLogger) Infof(format string, a ...any) logger.LogBuilder {
return &ZerologLogBuilder{
logEvent: l.logger.Info(),
msg: fmt.Sprintf(format, a...),
}
}
func (l *ZerologLogger) Warn(msg string) logger.LogBuilder {
return &ZerologLogBuilder{
logEvent: l.logger.Warn(),
msg: msg,
}
}
func (l *ZerologLogger) Warnf(format string, a ...any) logger.LogBuilder {
return &ZerologLogBuilder{
logEvent: l.logger.Warn(),
msg: fmt.Sprintf(format, a...),
}
}
func (l *ZerologLogger) Error(msg string) logger.LogBuilder {
return &ZerologLogBuilder{
logEvent: l.logger.Error(),
msg: msg,
}
}
func (l *ZerologLogger) Errorf(format string, a ...any) logger.LogBuilder {
return &ZerologLogBuilder{
logEvent: l.logger.Error(),
msg: fmt.Sprintf(format, a...),
}
}
func (l *ZerologLogger) Fatal(msg string) logger.LogBuilder {
return &ZerologLogBuilder{
logEvent: l.logger.Fatal(),
msg: msg,
}
}
func (l *ZerologLogger) Fatalf(format string, a ...any) logger.LogBuilder {
return &ZerologLogBuilder{
logEvent: l.logger.Fatal(),
msg: fmt.Sprintf(format, a...),
}
}
func (l *ZerologLogger) Panic(msg string) logger.LogBuilder {
return &ZerologLogBuilder{
logEvent: l.logger.Panic(),
msg: msg,
}
}
func (l *ZerologLogger) Panicf(format string, a ...any) logger.LogBuilder {
return &ZerologLogBuilder{
logEvent: l.logger.Panic(),
msg: fmt.Sprintf(format, a...),
}
}
type ZerologLogBuilder struct {
logEvent *zerolog.Event
msg string
}
func (b *ZerologLogBuilder) Int(key string, value int) logger.LogBuilder {
b.logEvent.Int(key, value)
return b
}
func (b *ZerologLogBuilder) Int8(key string, value int8) logger.LogBuilder {
b.logEvent.Int8(key, value)
return b
}
func (b *ZerologLogBuilder) Int16(key string, value int16) logger.LogBuilder {
b.logEvent.Int16(key, value)
return b
}
func (b *ZerologLogBuilder) Int32(key string, value int32) logger.LogBuilder {
b.logEvent.Int32(key, value)
return b
}
func (b *ZerologLogBuilder) Int64(key string, value int64) logger.LogBuilder {
b.logEvent.Int64(key, value)
return b
}
func (b *ZerologLogBuilder) Uint(key string, value uint) logger.LogBuilder {
b.logEvent.Uint(key, value)
return b
}
func (b *ZerologLogBuilder) Uint8(key string, value uint8) logger.LogBuilder {
b.logEvent.Uint8(key, value)
return b
}
func (b *ZerologLogBuilder) Uint16(key string, value uint16) logger.LogBuilder {
b.logEvent.Uint16(key, value)
return b
}
func (b *ZerologLogBuilder) Uint32(key string, value uint32) logger.LogBuilder {
b.logEvent.Uint32(key, value)
return b
}
func (b *ZerologLogBuilder) Uint64(key string, value uint64) logger.LogBuilder {
b.logEvent.Uint64(key, value)
return b
}
func (b *ZerologLogBuilder) Float32(key string, value float32) logger.LogBuilder {
b.logEvent.Float32(key, value)
return b
}
func (b *ZerologLogBuilder) Float64(key string, value float64) logger.LogBuilder {
b.logEvent.Float64(key, value)
return b
}
func (b *ZerologLogBuilder) Stringer(key string, value fmt.Stringer) logger.LogBuilder {
b.logEvent.Str(key, value.String())
return b
}
func (b *ZerologLogBuilder) Bytes(key string, value []byte) logger.LogBuilder {
b.logEvent.Bytes(key, value)
return b
}
func (b *ZerologLogBuilder) Timestamp() logger.LogBuilder {
b.logEvent.Time("timestamp", time.Now())
return b
}
func (b *ZerologLogBuilder) Bool(key string, value bool) logger.LogBuilder {
b.logEvent.Bool(key, value)
return b
}
func (b *ZerologLogBuilder) Str(key string, value string) logger.LogBuilder {
b.logEvent.Str(key, value)
return b
}
func (b *ZerologLogBuilder) Any(key string, value any) logger.LogBuilder {
b.logEvent.Interface(key, value)
return b
}
func (b *ZerologLogBuilder) Err(err error) logger.LogBuilder {
b.logEvent.Err(err)
return b
}
func (b *ZerologLogBuilder) Send() {
b.logEvent.Msg(b.msg)
}