Added logger singleton

This commit is contained in:
stratic-dev
2024-10-11 00:15:11 +01:00
parent 32dbfa7514
commit 44692e986e
12 changed files with 165 additions and 74 deletions

27
utils/logger/logger.go Normal file
View File

@@ -0,0 +1,27 @@
package logger
import (
"sync"
"go.uber.org/zap"
)
var (
instance Logger // Global instance of Logger interface
once sync.Once // Ensures logger is initialized only once
)
// Init initializes the global logger. This function should be called once, ideally during the app startup.
func Init(zapLogger *zap.Logger) {
once.Do(func() {
instance = NewZapLogger(zapLogger) // Assign the zapLogger as the global logger
})
}
// Get returns the global logger instance.
func Get() Logger {
if instance == nil {
panic("Logger is not initialized. Call logger.Init() before using the logger.")
}
return instance
}

View File

@@ -0,0 +1,14 @@
package logger
import "go.uber.org/zap"
// Logger interface to abstract logging
type Logger interface {
Info(msg string, fields ...zap.Field)
Warn(msg string, fields ...zap.Field)
Error(msg string, fields ...zap.Field)
Debug(msg string, fields ...zap.Field)
Fatal(msg string, fields ...zap.Field)
Named(name string) Logger
}

View File

@@ -0,0 +1,37 @@
package logger
import (
"go.uber.org/zap"
)
type ZapLogger struct {
logger *zap.Logger
}
// NewZapLogger creates a new ZapLogger instance
func NewZapLogger(zapLogger *zap.Logger) *ZapLogger {
return &ZapLogger{logger: zapLogger}
}
// Implement the Logger interface methods
func (z *ZapLogger) Info(msg string, fields ...zap.Field) {
z.logger.Info(msg, fields...)
}
func (z *ZapLogger) Warn(msg string, fields ...zap.Field) {
z.logger.Warn(msg, fields...)
}
func (z *ZapLogger) Error(msg string, fields ...zap.Field) {
z.logger.Error(msg, fields...)
}
func (z *ZapLogger) Fatal(msg string, fields ...zap.Field) {
z.logger.Fatal(msg, fields...)
}
func (z *ZapLogger) Debug(msg string, fields ...zap.Field) {
z.logger.Debug(msg, fields...)
}
func (z *ZapLogger) Named(name string) Logger {
return &ZapLogger{logger: z.logger.Named(name)}
}