summaryrefslogtreecommitdiff
path: root/internal/logger/logger.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/logger/logger.go')
-rw-r--r--internal/logger/logger.go43
1 files changed, 43 insertions, 0 deletions
diff --git a/internal/logger/logger.go b/internal/logger/logger.go
new file mode 100644
index 0000000..a5d0264
--- /dev/null
+++ b/internal/logger/logger.go
@@ -0,0 +1,43 @@
+package logger
+
+import (
+ "errors"
+
+ "go.uber.org/zap"
+ "go.uber.org/zap/zapcore"
+ "gopkg.in/natefinch/lumberjack.v2"
+)
+
+var logger *zap.Logger = nil
+
+func InitLogger(logFile string) *zap.Logger {
+ cfg := zap.NewProductionConfig()
+ cfg.OutputPaths = []string{logFile}
+ cfg.ErrorOutputPaths = []string{logFile}
+
+ // Configure lumberjack for log rotation
+ lumberjackLogger := &lumberjack.Logger{
+ Filename: logFile,
+ MaxSize: 100, // megabytes
+ MaxBackups: 5,
+ MaxAge: 30, // days
+ Compress: true,
+ }
+
+ core := zapcore.NewCore(
+ zapcore.NewJSONEncoder(cfg.EncoderConfig),
+ zapcore.AddSync(lumberjackLogger), // Log only to the file via lumberjack
+ cfg.Level,
+ )
+
+ logger = zap.New(core)
+
+ return logger
+}
+
+func GetLogger() (*zap.Logger, error) {
+ if logger == nil {
+ return nil, errors.New("You must call `InitLogger()` first.")
+ }
+ return logger, nil
+}