Go日志库go-logger v0.28.0 — 支持混合时间文件大小分割模式


go-logger 是一个高性能的golang日志库,旨在提供快速、轻量级的日志记录功能。
Github
使用文档
《go日志库性能基准压力测试》
性能:
  1. 极高并发性能:极高的并发写数据性能,比官方库或同类型日志库高10倍以上。特别在Linux环境中,性能比同类型日志库高30倍以上,具体请查看压测数据与相应测试程序。
  2. 极低内存占用:是官方库与同类型日志库的几分之一

v0.28.0 更新内容

  1. 新增支持混合时间文件大小分割模式
  2. 新增 CallDepth 参数
  3. 修复已知bug


详细说明:

1. 支持混合时间文件大小分割模式

此部分功能主要代码贡献者为: https://github.com/Emmenen


新增 FileMixedMode 用于设置混合模式参数

Filename   日志文件路径
Maxsize    日志文件大小的最大值,超过则滚动备份
Timemode   按小时,天,月份:MODE_HOUR,MODE_DAY,MODE_MONTH
Maxbuckup  最多备份日志文件数
IsCompress  备份文件是否压缩

示例:

func TestOption4mixed(t *testing.T) {
	logger.SetOption(&logger.Option{Console: true, FileOption: &logger.FileMixedMode{Filename: "testmixid.log", Maxbuckup: 10, IsCompress: true, Timemode: logger.MODE_DAY, Maxsize: 1 << 20}})
	for i := 0; i < 10000; i++ {
		logger.Debug("this is a debug message", 1111111111111111111)
		logger.Info("this is a info message", 2222222222222222222)
		logger.Warn("this is a warn message", 33333333333333333)
		logger.Error("this is a error message", 4444444444444444444)
		logger.Fatal("this is a fatal message", 555555555555555555)
	}
}

执行生成切分的备份时间如:

说明:日志文件达到1M时,将当天日期按格式化分割备份日志。



2. 新增 CallDepth 参数

在参数在 Option 中,CallDepth 为调用日志打印函数的调用深度。主要作用是提供外部封装 go-logger 打印函数。

示例:

测试文件 log.go  。如果没有使用 CallDepth 参数,假如MyDebug 封装 logger.Debug ,当其他函数调用MyDebug函数时, 日志打印实则无法正确打印调用者的文件名函数,实际打印的MyDebug函数所在文件名与调用logger.Debug行数,即 log.go:5

1. import (
2.  	"github.com/donnie4w/go-logger/logger"
3. )
4. func MyDebug(v ...interface{}) {
5.  	logger.Debug(v...)
6. }

CallDepth 为外部函数 封装 go-logger 提供了可能。如

1. import (
2.  	"github.com/donnie4w/go-logger/logger"
3. )
4. var log = logger.NewLogger().SetOption(&logger.Option{Console: true, CallDepth: 1})
5. func MyDebug(v ...interface{}) {
6.  	log.Debug(v...)
7. }

示例中:

MyDebug 函数封装 logger.Debug  ,调用深度为1,即一层函数封装。因此 CallDepth 为 1

外部函数调用 MyDebug 时,日志将可以正确打印调用者文件名与行数。

总之:CallDepth 为外部封装 go-logger 提供了可能,外部函数日志库封装go-logger后,可以深度的定制或封装日志内容的格式,并且正确显示调用者的文件名与行数。

当然,这是针对日志内容有深度定制需求的场景或有日志库再封装需求的场景。一般情况下,直接使用 go-logger 函数,通过 go-logger的Option参数: FormatFormatter, AttrFormat已经可以很好的自定义日志的格式。