tgf / internal /utils /logger.go
Mohammad Shahid
first push
5edf1f8
package utils
import (
"os"
"time"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"gopkg.in/natefinch/lumberjack.v2"
)
var Logger *zap.Logger
func InitLogger(debugMode bool) {
customTimeEncoder := func(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
enc.AppendString(t.Format("02/01/2006 03:04 PM"))
}
consoleConfig := zap.NewDevelopmentEncoderConfig()
consoleConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder
consoleConfig.EncodeTime = customTimeEncoder
consoleEncoder := zapcore.NewConsoleEncoder(consoleConfig)
fileEncoderConfig := zap.NewProductionEncoderConfig()
fileEncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
fileEncoder := zapcore.NewJSONEncoder(fileEncoderConfig)
fileWriter := zapcore.AddSync(&lumberjack.Logger{
Filename: "logs/app.log",
MaxSize: 10,
MaxBackups: 3,
MaxAge: 7,
Compress: true,
})
var consoleLevel zapcore.Level
if debugMode {
consoleLevel = zapcore.DebugLevel
} else {
consoleLevel = zapcore.InfoLevel
}
core := zapcore.NewTee(
zapcore.NewCore(consoleEncoder, zapcore.AddSync(os.Stdout), consoleLevel),
zapcore.NewCore(fileEncoder, fileWriter, zapcore.DebugLevel),
)
Logger = zap.New(core, zap.AddStacktrace(zapcore.FatalLevel))
}