Golang各类库学习笔记

zap+lumberjack

日志记录+日志切割2件套

包地址

"github.com/natefinch/lumberjack"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"

zap核心概念

  1. 日志级别
    • DebugLevel: 调试信息。
    • InfoLevel: 一般信息。
    • WarnLevel: 警告信息。
    • ErrorLevel: 错误信息。
    • DPanicLevel: 开发时恐慌(不会在正式环境生效)。
    • PanicLevel: 恐慌,会触发panic。
    • FatalLevel: 致命错误,记录日志后调用os.Exit(1)。
  2. 日志字段
    • Zap使用字段来结构化日志记录。每个字段都有一个键和一个值。
  3. Logger和SugaredLogger
    • Logger: 提供结构化日志记录,并且性能较高,但是编写起来可能不太方便,因为需要指定字段类型。
    • SugaredLogger: 提供更方便的日志记录方式,类似于传统的日志库,但性能略低于Logger

将2件套做成日志工具包

package utils

import (
	"time"

	"github.com/natefinch/lumberjack"
	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
)

func InitLogger() *zap.SugaredLogger {
	logWriter := &lumberjack.Logger{
		Filename:   "./cmd/运行日志.log",
		MaxSize:    10,   // 日志文件空间限制(MB)
		MaxBackups: 3,    //保留的最大备份文件数量
		MaxAge:     7,    // 保留日期,过期后自动删除
		Compress:   true, //旧的日志文件在滚动时是否压缩
	}
	encoderConfig := zapcore.EncoderConfig{
		MessageKey:     "message",                     //消息内容的键名
		LevelKey:       "level",                       //日志级别的键名
		TimeKey:        "time",                        //时间的键名
		EncodeLevel:    zapcore.CapitalLevelEncoder,   //日志级别的编码方式,编码为大写字母(如INFO, ERROR等)
		EncodeTime:     customTimeEncoder,             //时间的编码方式
		EncodeDuration: zapcore.StringDurationEncoder, //持续时间(如操作耗时)的编码方式
		EncodeCaller:   zapcore.ShortCallerEncoder,    //将持续时间编码为字符串
	}
	core := zapcore.NewCore(
		zapcore.NewConsoleEncoder(encoderConfig), //指定调用者信息的编码方式,通常是文件名和行号
		zapcore.AddSync(logWriter),               //将日志写入器添加到日志核心,以便日志可以被写入到文件中。
		zap.InfoLevel,                            //日志记录的初始级别。当前记录INFO及以上级别的日志。
	)
	logger := zap.New(core)
	return logger.Sugar()
}

// 自定义时间编码器,以中国时区格式化时间
func customTimeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
	enc.AppendString(t.In(time.FixedZone("UTC+8", 8*3600)).Format("2006-01-02 15:04:05 MST"))
}

调用日志工具包

进行日志记录和日志切割

package main

import (
	"KazeFrame/utils"
)

func main() {
	// 初始化日志器
	logger := utils.InitLogger()

	// 使用日志器记录信息
	logger.Info("程序启动")
	logger.Infof("当前时间: %s", time.Now().String())

	// 其他应用程序逻辑...
}
暂无评论

发送评论 编辑评论


				
上一篇
下一篇