介绍一个使用 Go 语言开发的高性能可配置可扩展的日志库 logit

这是一个使用 Go 语言开发的高性能可配置可扩展的日志库,名字叫 logit。

logit 是一个高性能的日志库,从测试结果来看,比主流日志库 zap、logrus 这些要快不少

logit 支持配置文件,所有配置都可以使用配置文件进行配置。

logit 支持自定义日志处理逻辑,只需要简单实现一个 Handler 接口,即可添加进 logger 中进行日志处理,对于日志采集、日志处理都是非常方便的。

logit 支持按照时间和文件大小自动分割日志文件,并支持日志级别划分不同的日志文件,比如 error 级别的日志输出到专门的 error 日志文件中。

大家可以看 B站上的介绍视频,对整个日志库的设计会有更清楚的了解。

源码地址

logit 源码发布在 Github码云 两个仓库上,国内想要访问速度比较快就使用 码云

Github: https://github.com/FishGoddess/logit

码云: https://gitee.com/FishGoddess/logit

使用案例

参考源码中附带的所有使用案例:

Github: https://github.com/FishGoddess/logit/tree/master/_examples

码云: https://gitee.com/FishGoddess/logit/tree/master/_examples

性能测试:

测试 10 秒内运行次数 (越大越好) 消耗时间 / 操作 (越小越好) 消耗内存 / 操作 (越小越好) 分配内存 / 操作 (越小越好)
logit 6429907 1855 ns/op 384 B/op 8 allocs/op
golog 3361483 3589 ns/op 712 B/op 24 allocs/op
zap 2971119 4066 ns/op 448 B/op 16 allocs/op
logrus 1553419 7869 ns/op 1633 B/op 52 allocs/op

测试环境:I7-6700HQ CPU @ 2.6 GHZ,16 GB RAM

注意:

1. 输出文件信息会有运行时操作(runtime.Caller 方法),非常影响性能,
但是这个功能感觉还是比较实用的,尤其是在查找错误的时候,所以我们还是加了这个功能!
如果你更在乎性能,那我们也提供了一个选项可以关闭文件信息的查询!

2. v0.0.7 及以前版本的日志输出使用了 fmt 包的一些方法,经过性能检测发现这些方法存在大量使用反射的
行为,主要体现在对参数 v interface{} 进行类型检测的逻辑上,而日志输出都是字符串,这一个
判断是可以省略的,可以减少很多运行时操作时间!v0.0.8 版本开始使用了更有效率的输出方式!

3. 经过对 v0.0.8 版本的性能检测,发现时间格式化操作消耗了接近一半的处理时间,
主要体现在 time.Time.AppendFormat 的调用上。在 v0.0.11 版本中使用了时间缓存机制进行优化,
目前存在一个疑惑就是使用并发竞争去换取时间格式化的性能消耗究竟值不值得?
答案是不值得,我们在 v0.1.1-alpha 及更高版本中取消了这个时间缓存机制。

你可能感兴趣的:(Golang)