示例
使用slog将日志保存到文件,同时输出到控制台。
使用第三方库import "gopkg.in/natefinch/lumberjack.v2"
实现log rotation
// 配置 lumberjack
logFile := &lumberjack.Logger{
Filename: common.LogFilePath, // 日志文件路径
MaxSize: 100, // 单个日志文件的最大大小(MB)
MaxBackups: 3, // 保留的旧日志文件数量
MaxAge: 28, // 保留旧日志文件的最大天数
Compress: true, // 是否压缩旧日志文件
}
// 配置 slog 写入文件、同时写到控制台
multiWriter := io.MultiWriter(os.Stdout, logFile)
logger := slog.New(slog.NewTextHandler(multiWriter, &slog.HandlerOptions{
Level: slog.LevelInfo, // 设定日志等级
}))
slog.SetDefault(logger) // 设置全局默认日志
slog.Info("log saved to", slog.String("path", common.LogFilePath))
lumberjack参数
字段名 | 类型 | 作用 | 说明 |
---|---|---|---|
Filename | string | 指定日志文件路径 | 为空时,默认使用 <进程名>-lumberjack.log 存放在 os.TempDir() |
MaxSize | int | 日志文件 最大大小(MB) | 例如 MaxSize: 10,表示日志文件 超过 10MB 就会进行切割 |
MaxAge | int | 最大保留天数 | 旧日志超过 MaxAge 天后删除(0 表示不按天删除) |
MaxBackups | int | 最大保留日志文件数 | 旧日志文件超过 MaxBackups 后会被删除 |
LocalTime | bool | 是否使用 本地时间 作为日志文件时间戳 | false 时使用 UTC 时间 |
Compress | bool | 是否对 旧日志进行 gzip 压缩 | true 表示对历史日志进行 .gz 压缩 |
size | int64 | 记录当前日志文件的大小 | 内部使用 |
file | *os.File | 当前日志文件的文件句柄 | 用于读写日志 |
mu | sync.Mutex | 互斥锁 | 确保多线程安全 |
millCh | chan bool | 信号通道 | 控制日志清理(删除旧日志等) |
startMill | sync.Once | 确保 millCh 只初始化一次 | 避免重复启动清理任务 |