gookit / slog

📑 Lightweight, configurable, extensible logging library written in Go. Support multi level, multi outputs and built-in multi file logger, buffers, clean, rotate-file handling.一个易于使用的,轻量级、可配置、可扩展的日志库。支持多个级别,输出到多文件;内置文件日志处理、自动切割、清理、压缩等增强功能

Home Page:https://pkg.go.dev/github.com/gookit/slog

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

日志按everyday自动滚动,文件名的日期对应的是前一天的日志

craterone opened this issue · 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点切割,生成的文件名称就错了。