Split log implementations

This commit is contained in:
Christian Schaible 2024-10-07 14:20:39 +02:00
parent a98e802f55
commit 3f222fc2be
6 changed files with 146 additions and 129 deletions

View file

@ -4,17 +4,8 @@ import (
"errors"
"log/slog"
)
import "github.com/rs/zerolog/log"
var AuditLogger = NewSlogAuditLogger(slog.Default())
func NewSlogAuditLogger(logger *slog.Logger) Logger {
return SlogLogger{logger: logger}
}
func NewZerologAuditLogger() Logger {
return ZeroLogLogger{}
}
var AuditLogger Logger = SlogLogger{logger: slog.Default()}
type Logger interface {
Debug(msg string, err ...error)
@ -23,52 +14,6 @@ type Logger interface {
Error(msg string, err ...error)
}
type SlogLogger struct {
logger *slog.Logger
}
func (s SlogLogger) Debug(msg string, err ...error) {
s.logger.Debug(msg, s.getWrappedError(err))
}
func (s SlogLogger) Info(msg string, err ...error) {
s.logger.Info(msg, s.getWrappedError(err))
}
func (s SlogLogger) Warn(msg string, err ...error) {
s.logger.Warn(msg, s.getWrappedError(err))
}
func (s SlogLogger) Error(msg string, err ...error) {
s.logger.Error(msg, s.getWrappedError(err))
}
func (s SlogLogger) getWrappedError(err []error) slog.Attr {
var wrappedErr slog.Attr
if err != nil {
wrappedErr = slog.Any("error", wrapErr(err))
}
return wrappedErr
}
type ZeroLogLogger struct{}
func (l ZeroLogLogger) Debug(msg string, err ...error) {
log.Debug().Err(wrapErr(err)).Msg(msg)
}
func (l ZeroLogLogger) Info(msg string, err ...error) {
log.Info().Err(wrapErr(err)).Msg(msg)
}
func (l ZeroLogLogger) Warn(msg string, err ...error) {
log.Warn().Err(wrapErr(err)).Msg(msg)
}
func (l ZeroLogLogger) Error(msg string, err ...error) {
log.Error().Err(wrapErr(err)).Msg(msg)
}
func wrapErr(err []error) error {
var e error
if len(err) == 0 {

View file

@ -2,7 +2,6 @@ package log
import (
"errors"
"log/slog"
"testing"
)
@ -39,75 +38,3 @@ func Test_DefaultLogger(t *testing.T) {
AuditLogger.Error("error message", errors.New("custom error"))
})
}
func Test_SlogLogger(t *testing.T) {
AuditLogger = NewSlogAuditLogger(slog.Default())
t.Run("debug", func(t *testing.T) {
AuditLogger.Debug("debug message")
})
t.Run("debug with error details", func(t *testing.T) {
AuditLogger.Debug("debug message", errors.New("custom error"))
})
t.Run("info", func(t *testing.T) {
AuditLogger.Info("info message")
})
t.Run("info with error details", func(t *testing.T) {
AuditLogger.Info("info message", errors.New("custom error"))
})
t.Run("warn", func(t *testing.T) {
AuditLogger.Warn("warn message")
})
t.Run("warn with error details", func(t *testing.T) {
AuditLogger.Warn("warn message", errors.New("custom error"))
})
t.Run("error", func(t *testing.T) {
AuditLogger.Error("error message")
})
t.Run("error with error details", func(t *testing.T) {
AuditLogger.Error("error message", errors.New("custom error"))
})
}
func Test_ZerologLogger(t *testing.T) {
AuditLogger = NewZerologAuditLogger()
t.Run("debug", func(t *testing.T) {
AuditLogger.Debug("debug message")
})
t.Run("debug with error details", func(t *testing.T) {
AuditLogger.Debug("debug message", errors.New("custom error"))
})
t.Run("info", func(t *testing.T) {
AuditLogger.Info("info message")
})
t.Run("info with error details", func(t *testing.T) {
AuditLogger.Info("info message", errors.New("custom error"))
})
t.Run("warn", func(t *testing.T) {
AuditLogger.Warn("warn message")
})
t.Run("warn with error details", func(t *testing.T) {
AuditLogger.Warn("warn message", errors.New("custom error"))
})
t.Run("error", func(t *testing.T) {
AuditLogger.Error("error message")
})
t.Run("error with error details", func(t *testing.T) {
AuditLogger.Error("error message", errors.New("custom error"))
})
}

35
log/slog.go Normal file
View file

@ -0,0 +1,35 @@
package log
import "log/slog"
type SlogLogger struct {
logger *slog.Logger
}
func UseSlogAuditLogger(logger *slog.Logger) {
AuditLogger = SlogLogger{logger: logger}
}
func (s SlogLogger) Debug(msg string, err ...error) {
s.logger.Debug(msg, s.getWrappedError(err))
}
func (s SlogLogger) Info(msg string, err ...error) {
s.logger.Info(msg, s.getWrappedError(err))
}
func (s SlogLogger) Warn(msg string, err ...error) {
s.logger.Warn(msg, s.getWrappedError(err))
}
func (s SlogLogger) Error(msg string, err ...error) {
s.logger.Error(msg, s.getWrappedError(err))
}
func (s SlogLogger) getWrappedError(err []error) slog.Attr {
var wrappedErr slog.Attr
if err != nil {
wrappedErr = slog.Any("error", wrapErr(err))
}
return wrappedErr
}

43
log/slog_test.go Normal file
View file

@ -0,0 +1,43 @@
package log
import (
"errors"
"log/slog"
"testing"
)
func Test_SlogLogger(t *testing.T) {
UseSlogAuditLogger(slog.Default())
t.Run("debug", func(t *testing.T) {
AuditLogger.Debug("debug message")
})
t.Run("debug with error details", func(t *testing.T) {
AuditLogger.Debug("debug message", errors.New("custom error"))
})
t.Run("info", func(t *testing.T) {
AuditLogger.Info("info message")
})
t.Run("info with error details", func(t *testing.T) {
AuditLogger.Info("info message", errors.New("custom error"))
})
t.Run("warn", func(t *testing.T) {
AuditLogger.Warn("warn message")
})
t.Run("warn with error details", func(t *testing.T) {
AuditLogger.Warn("warn message", errors.New("custom error"))
})
t.Run("error", func(t *testing.T) {
AuditLogger.Error("error message")
})
t.Run("error with error details", func(t *testing.T) {
AuditLogger.Error("error message", errors.New("custom error"))
})
}

25
log/zerolog.go Normal file
View file

@ -0,0 +1,25 @@
package log
import "github.com/rs/zerolog/log"
type ZeroLogLogger struct{}
func UseZerologAuditLogger() {
AuditLogger = ZeroLogLogger{}
}
func (l ZeroLogLogger) Debug(msg string, err ...error) {
log.Debug().Err(wrapErr(err)).Msg(msg)
}
func (l ZeroLogLogger) Info(msg string, err ...error) {
log.Info().Err(wrapErr(err)).Msg(msg)
}
func (l ZeroLogLogger) Warn(msg string, err ...error) {
log.Warn().Err(wrapErr(err)).Msg(msg)
}
func (l ZeroLogLogger) Error(msg string, err ...error) {
log.Error().Err(wrapErr(err)).Msg(msg)
}

42
log/zerolog_test.go Normal file
View file

@ -0,0 +1,42 @@
package log
import (
"errors"
"testing"
)
func Test_ZerologLogger(t *testing.T) {
UseZerologAuditLogger()
t.Run("debug", func(t *testing.T) {
AuditLogger.Debug("debug message")
})
t.Run("debug with error details", func(t *testing.T) {
AuditLogger.Debug("debug message", errors.New("custom error"))
})
t.Run("info", func(t *testing.T) {
AuditLogger.Info("info message")
})
t.Run("info with error details", func(t *testing.T) {
AuditLogger.Info("info message", errors.New("custom error"))
})
t.Run("warn", func(t *testing.T) {
AuditLogger.Warn("warn message")
})
t.Run("warn with error details", func(t *testing.T) {
AuditLogger.Warn("warn message", errors.New("custom error"))
})
t.Run("error", func(t *testing.T) {
AuditLogger.Error("error message")
})
t.Run("error with error details", func(t *testing.T) {
AuditLogger.Error("error message", errors.New("custom error"))
})
}