package logger import ( "os" "github.com/natefinch/lumberjack" "go.uber.org/zap" "go.uber.org/zap/zapcore" ) var ( log_inst = _NewLogger() enable_debug = false log_level = zap.NewAtomicLevel() log_file_config = zapcore.AddSync(&lumberjack.Logger{ Filename: "services/logger/serverlog.log", MaxSize: 500, // megabytes MaxBackups: 3, MaxAge: 28, //days LocalTime: true, }) json_enc = zapcore.NewJSONEncoder(zapcore.EncoderConfig{ TimeKey: "timestamp", LevelKey: "level", NameKey: "logger", EncodeLevel: zapcore.LowercaseLevelEncoder, EncodeTime: zapcore.ISO8601TimeEncoder, }) console_enc = zapcore.NewConsoleEncoder(zapcore.EncoderConfig{ TimeKey: "timestamp", LevelKey: "level", NameKey: "logger", CallerKey: "caller", MessageKey: "message", StacktraceKey: "error", EncodeLevel: zapcore.CapitalColorLevelEncoder, EncodeTime: zapcore.ISO8601TimeEncoder, }) ) func createLogggerConfig() *zap.Logger { enable_debug_mode := zap.LevelEnablerFunc(func(lvl zapcore.Level) bool { return lvl >= zap.InfoLevel || enable_debug }) log_core := zapcore.NewTee( zapcore.NewCore(json_enc, log_file_config, enable_debug_mode), zapcore.NewCore(console_enc, zapcore.AddSync(os.Stdout), enable_debug_mode), ) return zap.New(log_core) } func _NewLogger() *zap.Logger { log := createLogggerConfig() defer log.Sync() return log } func GetInstance() *zap.Logger { return log_inst } func EnableDebug(state bool) { enable_debug = state }