go 设置滚动日志

方案

通过 log/slog 实现结构化日志生成,这是go1.21中推出的新特性;通过 lumberjack 实现日志文件分割。

示例

package main

import (
	"gopkg.in/natefinch/lumberjack.v2"
	"log/slog"
	"os"
	"path/filepath"
)

func main() {
	r := &lumberjack.Logger{
		Filename:   filepath.Base(os.Args[0]) + ".log",
		LocalTime:  true,
		MaxSize:    1,
		MaxAge:     3,
		MaxBackups: 5,
		Compress:   true,
	}
	logger := slog.New(slog.NewJSONHandler(r, nil))
	slog.SetDefault(logger)
	slog.Info("start app")

参数说明

lumberjack.Logger

type Logger struct {
		// Filename 是用来写入日志的文件。旋转的日志文件将被保留在同一目录中。
		// 如果 Filename 为空,它将使用 os.TempDir() 中的 <processname>-lumberjack.log 文件。
		Filename string `json:"filename" yaml:"filename"`

		// MaxSize 是日志文件在进行轮转之前的最大大小(以兆字节为单位)。默认为100兆字节。
		MaxSize int `json:"maxsize" yaml:"maxsize"`

		// MaxAge 是根据文件名中的时间戳编码来保留旧日志文件的最大天数。请注意,一天定义为24小时,可能由于夏令时、闰秒等原因与日历天数不完全对应。
		// 默认情况下,不根据年龄删除旧的日志文件。
		MaxAge int `json:"maxage" yaml:"maxage"`

		// MaxBackups 是要保留的旧日志文件的最大数量。默认情况下,保留所有旧的日志文件(尽管 MaxAge 可能仍会导致它们被删除)。
		MaxBackups int `json:"maxbackups" yaml:"maxbackups"`

		// LocalTime 确定备份文件中时间戳格式化所使用的时间是否为计算机的本地时间。默认情况下,使用 UTC 时间。
		LocalTime bool `json:"localtime" yaml:"localtime"`

		// Compress 确定是否使用 gzip 对轮转的日志文件进行压缩。默认情况下,不执行压缩。
		Compress bool `json:"compress" yaml:"compress"`
		// 包含过滤或未导出的字段
}

参考

lumberjack package - gopkg.in/natefinch/lumberjack.v2 - Go Packages

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋雨夕照

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值