package zaplog import ( "fmt" "kpt-tmr-group/pkg/tool" "path" "runtime" "time" "github.com/natefinch/lumberjack" "go.uber.org/zap" "go.uber.org/zap/zapcore" ) var ( Logger *zap.Logger logFileName = fmt.Sprintf("./logger/zap-%s.log", time.Now().Format(tool.DateTime)) ) func init() { encoderConfig := zap.NewDevelopmentEncoderConfig() // 设置日志时间格式 encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder // 日志encoder 还是json encode,把日志进行格式化json格式的 encoder := zapcore.NewJSONEncoder(encoderConfig) // topicErrors := zapcore.AddSync(ioutil.Discard) //kafka topic fileWriteSyncer := getFileLogWriter(logFileName) core := zapcore.NewTee( // zapcore.NewCore(encoder, zapcore.AddSync(os.Stdout), zapcore.DebugLevel), // 打印到控制台 // zapcore.NewCore(zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), topicErrors, zapcore.ErrorLevel), // 打印到kafka 待验证 zapcore.NewCore(encoder, fileWriteSyncer, zapcore.DebugLevel), // 打印到指定的日志文件 ) Logger = zap.New(core) } func getFileLogWriter(logFileName string) zapcore.WriteSyncer { lumberJackLogger := &lumberjack.Logger{ Filename: logFileName, MaxSize: 100, // 单个文件最大100M MaxBackups: 10, // 大于60个日志文件后,清理比较旧的日志文件 MaxAge: 1, // 一天切割1次 Compress: false, } return zapcore.AddSync(lumberJackLogger) } func getCallerInfoForLog() (callerFields []zap.Field) { pc, file, line, ok := runtime.Caller(2) if !ok { return } funcName := runtime.FuncForPC(pc).Name() funcName = path.Base(funcName) callerFields = append(callerFields, zap.String("func", funcName), zap.String("file", file), zap.Int("line", line)) return } func Info(message string, fields ...zap.Field) { callerFields := getCallerInfoForLog() fields = append(fields, callerFields...) Logger.Info(message, fields...) } func Debug(message string, fields ...zap.Field) { callerFields := getCallerInfoForLog() fields = append(fields, callerFields...) Logger.Debug(message, fields...) } func Error(message string, fields ...zap.Field) { callerFields := getCallerInfoForLog() fields = append(fields, callerFields...) Logger.Error(message, fields...) } func Warn(message string, fields ...zap.Field) { callerFields := getCallerInfoForLog() fields = append(fields, callerFields...) Logger.Warn(message, fields...) }