日志按everyday自动滚动,文件名的日期对应的是前一天的日志
craterone opened this issue · 7 comments
比如, xx.log.20240228, 包含的日志为 2024/02/27和 28号 12点 的日志,是不是 xx.log.20240228 应该包含 28号 0点-23:59点的?
@craterone 看我加了个测试,没有发现有问题呢?内容和文件差了一天吗?
写日志比较密集的话可能会出现几个边界数据问题的,这个是没法避免的。
对,差了一天。日志数据量不大,使用的版本是 slog v0.5.5
h1 := handler.MustRotateFile(G_Config.LogFilePath, rotatefile.EveryDay,
handler.WithLogLevels(slog.AllLevels),
handler.WithBuffSize(0),
handler.WithBackupNum(10),
handler.WithMaxSize(1<<30), // 1GB
)
h1.SetFormatter(f)
G_Logger = slog.NewWithHandlers(h1)
比如使用 slog 生成的日志 2024-03-24, 日志包含的大部分 2024-03-23的日志,和几行 2024-03-24凌晨的日志
我看一下其他库,感觉是逻辑不太一样,比如 2024-03-25 当天,其他库会写日志的时候,会直接写在 2024-03-25.log 文件; 而slog 会写在 xx.log 里,然后rename 成 2024-03-25.log 。我猜会不会是,这个rename的时间点如果迟了,就会迟一天了
@craterone 你看看这个日志文件的创建时间呢?
可以选择分割模式: rename 或者 create(会直接写
name-DATETIME.log
)
打不出来创建时间,只有最后修改时间
signal.log.20240324
File: ‘signal.log.20240324’
Size: 264960 Blocks: 528 IO Block: 4096 regular file
Device: fd11h/64785d Inode: 6689045 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2024-03-25 09:44:46.941377348 +0800
Modify: 2024-03-24 00:00:20.796371637 +0800
Change: 2024-03-24 00:00:20.798371631 +0800
可以选择分割模式: rename 或者 create(会直接写
name-DATETIME.log
)
如何选择分割模式,我看了一下文档没找到
handler.WithRotateMode(rotatefile.ModeCreate),
设置分割模式。
确认机器上时区啥的没问题吗? 😄
应该不会,这个机器还有其他项目在运行,用的别的日志库,都是正常的。 我先改分割模式试试吧。
找到问题了,使用的当前时间生成文件名称,如果刚好过了0点切割,生成的文件名称就错了。