异步日志库

Install

go get -u github.com/ibbd-dev/go-async-log

实现的功能及说明

RFC33392006-01-02T15:04:05Z07:00

配置项

  • 文件名
  • 日志记录的等级
  • 自动切割周期:默认按小时
  • 批量写入周期:默认每秒写入一次
  • 异常等级:
  • 是否需要Flags:默认需要

Example

普通写入日志文件

lf := asyncLog.NewLogFile("/tmp/test.log")

// 设置按天切割文件,如果默认则是按小时
lf.SetRotate(asyncLog.RotateDate)

lf.SetProbability(0.5) // 设置写log的概率,默认全部都写入

_ = lf.Write("lf: hello world")

// 注意:因为是每秒写入一次,所以这里需要暂停一下
time.Sleep(time.Second * 2)

写入错误等级文件

infoFile := asyncLog.NewLevelLog("/tmp/test-info.log", asyncLog.LevelInfo)  // 只有Info级别或者以上级别的日志才会被记录
infoFile.SetProbability(0.5) // 设置写log的概率,默认全部都写入
infoFile.Debug("hello world") // 该日志不会写入文件
infoFile.Info("hello world")
infoFile.Error("hello world")

// 需要改变日志写入等级时,例如测试阶段
infoFile.SetLevel(asyncLog.LevelDebug)

time.Sleep(time.Second * 2)

性能数据

不缓存内容的时候,如果不对文件句柄进行缓存重用,性能是比较低的,如下:(这是旧版本)

# go test -bench=".*"
BenchmarkWrite-4          	 3000000	       444 ns/op
BenchmarkWriteNoCache-4   	  300000	      4400 ns/op

对句柄进行缓存重用之后,性能如下:

BenchmarkWrite-4          	 3000000	       570 ns/op
BenchmarkWriteNoCache-4   	 1000000	      2304 ns/op

结论:对句柄进行缓存,是能大大提升效率的。

github.com/ibbd-dev/go-tools/logfile