From 4a21980e44eaf86f1fb230cbfb0121eb365d037c Mon Sep 17 00:00:00 2001 From: Ethan Wellenreiter Date: Sat, 26 Apr 2025 19:52:01 -0400 Subject: [PATCH] Adding logger interface Signed-off-by: Ethan Wellenreiter --- backend/internal/logger/logger.go | 9 +++++++ backend/internal/logger/note.txt | 1 + backend/internal/logger/slog.go | 38 ++++++++++++++++++++++++++++++ backend/internal/logger/zap.go | 35 +++++++++++++++++++++++++++ backend/internal/logger/zerolog.go | 36 ++++++++++++++++++++++++++++ 5 files changed, 119 insertions(+) create mode 100644 backend/internal/logger/logger.go create mode 100644 backend/internal/logger/note.txt create mode 100644 backend/internal/logger/slog.go create mode 100644 backend/internal/logger/zap.go create mode 100644 backend/internal/logger/zerolog.go diff --git a/backend/internal/logger/logger.go b/backend/internal/logger/logger.go new file mode 100644 index 0000000..51188de --- /dev/null +++ b/backend/internal/logger/logger.go @@ -0,0 +1,9 @@ +package logger + +type Logger interface { + Debug(msg string, keysAndValues ...interface{}) + Info(msg string, keysAndValues ...interface{}) + Warn(msg string, keysAndValues ...interface{}) + Error(msg string, keysAndValues ...interface{}) + Fatal(msg string, keysAndValues ...interface{}) +} diff --git a/backend/internal/logger/note.txt b/backend/internal/logger/note.txt new file mode 100644 index 0000000..32d356e --- /dev/null +++ b/backend/internal/logger/note.txt @@ -0,0 +1 @@ +logger taken from https://dwarvesf.hashnode.dev/go-1-21-release-slog-with-benchmarks-zerolog-and-zap#heading-implementing-the-logger-with-zerolog-and-zap \ No newline at end of file diff --git a/backend/internal/logger/slog.go b/backend/internal/logger/slog.go new file mode 100644 index 0000000..b1bc58d --- /dev/null +++ b/backend/internal/logger/slog.go @@ -0,0 +1,38 @@ +package logger + +import ( + "log" + "log/slog" + "os" +) + +type SlogLogger struct { + log *slog.Logger +} + +func NewSlogLogger() Logger { + sl := slog.New(slog.NewJSONHandler(os.Stdout, nil)) + + return &SlogLogger{log: sl} +} + +func (zl *SlogLogger) Debug(msg string, keysAndValues ...interface{}) { + zl.log.Debug(msg, keysAndValues...) +} + +func (zl *SlogLogger) Info(msg string, keysAndValues ...interface{}) { + zl.log.Info(msg, keysAndValues...) +} + +func (zl *SlogLogger) Warn(msg string, keysAndValues ...interface{}) { + zl.log.Warn(msg, keysAndValues...) +} + +func (zl *SlogLogger) Error(msg string, keysAndValues ...interface{}) { + zl.log.Error(msg, keysAndValues...) +} + +func (zl *SlogLogger) Fatal(msg string, keysAndValues ...interface{}) { + zl.log.Error(msg, keysAndValues...) + log.Fatal(msg) +} diff --git a/backend/internal/logger/zap.go b/backend/internal/logger/zap.go new file mode 100644 index 0000000..6ecad64 --- /dev/null +++ b/backend/internal/logger/zap.go @@ -0,0 +1,35 @@ +package logger + +import ( + "go.uber.org/zap" +) + +type ZapLogger struct { + log *zap.SugaredLogger +} + +func NewZapLogger() Logger { + logger, _ := zap.NewProduction() + sugar := logger.Sugar() + return &ZapLogger{log: sugar} +} + +func (zl *ZapLogger) Debug(msg string, keysAndValues ...interface{}) { + zl.log.Debugw(msg, keysAndValues...) +} + +func (zl *ZapLogger) Info(msg string, keysAndValues ...interface{}) { + zl.log.Infow(msg, keysAndValues...) +} + +func (zl *ZapLogger) Warn(msg string, keysAndValues ...interface{}) { + zl.log.Warnw(msg, keysAndValues...) +} + +func (zl *ZapLogger) Error(msg string, keysAndValues ...interface{}) { + zl.log.Errorw(msg, keysAndValues...) +} + +func (zl *ZapLogger) Fatal(msg string, keysAndValues ...interface{}) { + zl.log.Fatalw(msg, keysAndValues...) +} diff --git a/backend/internal/logger/zerolog.go b/backend/internal/logger/zerolog.go new file mode 100644 index 0000000..f4b8799 --- /dev/null +++ b/backend/internal/logger/zerolog.go @@ -0,0 +1,36 @@ +// package logger + +// import ( +// "os" + +// "github.com/rs/zerolog" +// ) + +// type ZeroLogger struct { +// log zerolog.Logger +// } + +// func NewZeroLogger() Logger { +// zl := zerolog.New(os.Stdout).With().Timestamp().Logger() +// return &ZeroLogger{log: zl} +// } + +// func (zl *ZeroLogger) Debug(msg string, keysAndValues ...interface{}) { +// zl.log.Debug().Fields(keysAndValues).Msg(msg) +// } + +// func (zl *ZeroLogger) Info(msg string, keysAndValues ...interface{}) { +// zl.log.Info().Fields(keysAndValues).Msg(msg) +// } + +// func (zl *ZeroLogger) Warn(msg string, keysAndValues ...interface{}) { +// zl.log.Warn().Fields(keysAndValues).Msg(msg) +// } + +// func (zl *ZeroLogger) Error(msg string, keysAndValues ...interface{}) { +// zl.log.Error().Fields(keysAndValues).Msg(msg) +// } + +// func (zl *ZeroLogger) Fatal(msg string, keysAndValues ...interface{}) { +// zl.log.Fatal().Fields(keysAndValues).Msg(msg) +// }