From 6f2e112e3f17fda619eb9c19a8d8d2ae9d9598d9 Mon Sep 17 00:00:00 2001
From: liuxiaolong <liuxiaolong@aiotlink.com>
Date: 星期三, 18 十一月 2020 17:47:42 +0800
Subject: [PATCH] 支持动态修改日志等级

---
 logger.go |   58 ++++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 40 insertions(+), 18 deletions(-)

diff --git a/logger.go b/logger.go
index e1f04f9..572be63 100644
--- a/logger.go
+++ b/logger.go
@@ -1,6 +1,7 @@
 package logger
 
 import (
+	"errors"
 	"github.com/natefinch/lumberjack"
 	"go.uber.org/zap"
 	"go.uber.org/zap/zapcore"
@@ -13,6 +14,11 @@
 	logger *zap.SugaredLogger
 }
 
+var (
+	blog *BLog
+	atomicLevel = zap.NewAtomicLevelAt(zapcore.DebugLevel)
+)
+
 func (l *BLog) Write(buf []byte) (n int, err error) {
 	l.logger.Debug(strings.Replace(string(buf),"\n","", -1))
 	return len(buf),nil
@@ -21,8 +27,6 @@
 func GetLogFile() *BLog {
 	return  blog
 }
-
-var blog *BLog
 
 const (
 	DebugLevel = iota -1
@@ -33,6 +37,7 @@
 	PanicLevel
 	FatalLevel
 )
+
 func InitLogger(logPath string, logLevel int,maxSize int, maxBackups int, maxAge int) {
 	logdir := "./logger/"
 	if index := strings.LastIndex(logPath, "/"); index != -1 {
@@ -52,6 +57,31 @@
 	}
 	w := zapcore.AddSync(&hook)
 
+	atomicLevel = zap.NewAtomicLevelAt(getZapLevel(logLevel))
+
+	encoderConfig := zap.NewProductionEncoderConfig()
+	encoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder
+	encoderConfig.CallerKey = "file"
+	encoderConfig.EncodeCaller = zapcore.ShortCallerEncoder
+	encoderConfig.EncodeTime = func(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
+		enc.AppendString(t.Format("2006-01-02 15:04:05"))
+	}
+
+	core := zapcore.NewCore(
+		zapcore.NewConsoleEncoder(encoderConfig),
+		w,
+		atomicLevel,
+	)
+
+	log := zap.New(core, zap.AddCaller(), zap.AddCallerSkip(1))
+
+	blog = &BLog{
+		logger: log.Sugar(),
+	}
+	blog.logger.Info("init logger success")
+}
+
+func getZapLevel(logLevel int) zapcore.Level {
 	var level zapcore.Level
 	switch logLevel {
 	case DebugLevel:
@@ -71,24 +101,16 @@
 	default:
 		level = zap.InfoLevel
 	}
-	encoderConfig := zap.NewProductionEncoderConfig()
-	encoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder
-	encoderConfig.CallerKey = "file"
-	encoderConfig.EncodeCaller = zapcore.ShortCallerEncoder
-	encoderConfig.EncodeTime = func(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
-		enc.AppendString(t.Format("2006-01-02 15:04:05"))
-	}
+	return level
+}
 
-	core := zapcore.NewCore(
-		zapcore.NewConsoleEncoder(encoderConfig),
-		w,
-		level,
-	)
-	log := zap.New(core, zap.AddCaller(), zap.AddCallerSkip(1))
-	blog = &BLog{
-		logger: log.Sugar(),
+func SetLevel(lv int) error {
+	if blog !=nil && blog.logger != nil {
+		atomicLevel.SetLevel(getZapLevel(lv))
+		return nil
+	} else {
+		return errors.New("logger handle is nil")
 	}
-	blog.logger.Info("init logger success")
 }
 
 func Debug(v ...interface{}) {

--
Gitblit v1.8.0