如何配置日志清理
SHOWufei opened this issue · 9 comments
SHOWufei commented
作者您好:
默认安装是 github.com/gookit/slog v0.2.1,日志清理是在哪一个版本实现的,如何配置日志自动清理?
inhere commented
最好使用最新发布的版本。
示例:
testFile := "testdata/error.log"
h := handler.NewEmptyConfig().
With(
handler.WithLogfile(testFile),
handler.WithBuffSize(1024*8),
handler.WithLogLevels(slog.DangerLevels),
handler.WithBuffMode(handler.BuffModeBite),
handler.WithBackupNum(10), // 保留数量
).
CreateHandler()
l := slog.NewWithHandlers(h)
SHOWufei commented
当前是这么封装调用的,应该如何调整?
示例:
var Slog = struct {
Logger *slog.Logger
}{}
func Setup(channel string) {
// 获取日志配置信息
var logPath string = app.SystemLog.LogPath
var logFormatter string = app.SystemLog.LogFormatter
var rt uint8 = app.SystemLog.RotateTime
// 日志文件,默认 application
logfileErr := fmt.Sprintf("%s/%s.wf.log", logPath, channel)
logfileInf := fmt.Sprintf("%s/%s.log", logPath, channel)
// 自定义 channel 名称
slog.DefaultChannelName = channel
// 自定义 Handler
var hErr, hInf *handler.TimeRotateFileHandler
// 输出日志到指定文件,并且自定义按时间分割文件,默认启用 buffer 缓冲写入
switch rt {
case 0:
hErr = handler.MustTimeRotateFile(logfileErr, handler.EveryDay)
hInf = handler.MustTimeRotateFile(logfileInf, handler.EveryDay)
case 1:
hErr = handler.MustTimeRotateFile(logfileErr, handler.EveryHour)
hInf = handler.MustTimeRotateFile(logfileInf, handler.EveryHour)
case 2:
hErr = handler.MustTimeRotateFile(logfileErr, handler.Every30Minutes)
hInf = handler.MustTimeRotateFile(logfileInf, handler.Every30Minutes)
case 3:
hErr = handler.MustTimeRotateFile(logfileErr, handler.Every15Minutes)
hInf = handler.MustTimeRotateFile(logfileInf, handler.Every15Minutes)
case 4:
hErr = handler.MustTimeRotateFile(logfileErr, handler.EveryMinute)
hInf = handler.MustTimeRotateFile(logfileInf, handler.EveryMinute)
case 5:
hErr = handler.MustTimeRotateFile(logfileErr, handler.EverySecond)
hInf = handler.MustTimeRotateFile(logfileInf, handler.EverySecond)
}
// 使用 JSON 格式
if logFormatter == "json" {
hErr.SetFormatter(slog.NewJSONFormatter())
hInf.SetFormatter(slog.NewJSONFormatter())
}
// 自定义日志标准
hErr.Levels = slog.Levels{slog.PanicLevel, slog.ErrorLevel, slog.WarnLevel, slog.FatalLevel}
hInf.Levels = slog.Levels{slog.InfoLevel, slog.NoticeLevel, slog.DebugLevel, slog.TraceLevel}
// 禁用 buffer 缓冲写入
hErr.NoBuffer = true
hInf.NoBuffer = true
// 创建一个全新的 slog.Logger 实例
Slog.Logger = slog.New()
// 为新的 slog.Logger 实例添加日志处理器
Slog.Logger.AddHandler(hErr)
Slog.Logger.AddHandler(hInf)
}
SHOWufei commented
func Test() {
Setup("solar")
Slog.Logger.Error("test error")
}
SHOWufei commented
func Test() {
Setup("solar")
Slog.Logger.Error("test error")
}
inhere commented
建议使用新版本,创建 handler 更简单和灵活。
options := []handler.ConfigFn{
handler.WithLogLevels(slog.DangerLevels),
handler.WithBuffSize(128),
handler.WithBackupNum(12),
}
// 新版切割时间是秒为单位,方便使用。 handler.EveryDay = timex.OneDaySec
hErr := handler.MustTimeRotateFile(logfile, handler.EveryDay, options...)
SHOWufei commented
好的好的,非常感谢 Thanks♪(・ω・)ノ
SHOWufei commented
作者您好。
go get -u github.com/gookit/slog@master
// 当前版本 github.com/gookit/slog v0.4.1-0.20230104170320-400f636a1d0f
没有 WithBackupNum() 函数,更没有自定义 BackupTime 的函数。
inhere commented
好像没加这个快捷方法,下个版本加下。
可以直接这样:
options := []handler.ConfigFn{
handler.WithLogLevels(slog.DangerLevels),
handler.WithBuffSize(128),
func(c *handler.Config) {
c.BackupNum = 12
// more setting ...
},
}
SHOWufei commented
赞👍🏻