GitHub - donnie4w/go-logger: golang 高性能日志库, 支持日志格式化, 文件压缩, 切割备份
go-logger的实现与simplelog相同,是golang极为高效的日志工具库,实现方式也很简洁
go-logger与uber实现的高性能日志库zap 从性能压测结果看,
go-logger在性能与内存消耗上都有优势。
性能测试:
测试说明:以下 simplelog 即 go-logger
测试日志库 | 描述 |
---|---|
zap | "go.uber.org/zap" 高性能日志库常规格式化输出 |
simplelog | simplelog 常规格式化输出 |
simplelog NoFORMAT | simplelog 无格式化输出 |
simplelog write | simplelog write 方法写数据 |
go/ log | go 自带 log 库格式化输出 |
测试数据 1
ns/op | B/op | allocs/op | ||
---|---|---|---|---|
zap | 1822892 | 6876 | 336 | 6 |
zap | 1730490 | 7037 | 336 | 6 |
simplelog | 1732777 | 6461 | 296 | 3 |
simplelog | 1758446 | 6419 | 296 | 3 |
simplelog NoFORMAT | 2670556 | 4340 | 112 | 1 |
simplelog NoFORMAT | 2694154 | 4192 | 112 | 1 |
simplelog write | 2949058 | 4087 | 112 | 1 |
simplelog write | 2843649 | 4093 | 112 | 1 |
go/ log | 2162052 | 5551 | 296 | 3 |
go/ log | 2139168 | 5715 | 296 | 3 |
Parallel 测试 2
ns/op | B/op | allocs/op | ||
---|---|---|---|---|
zap | 1000000 | 10572 | 336 | 6 |
zap | 1000000 | 10414 | 337 | 6 |
simplelog | 1330300 | 8803 | 296 | 3 |
simplelog | 1363034 | 8945 | 296 | 3 |
simplelog NoFORMAT | 2053911 | 7076 | 112 | 1 |
simplelog NoFORMAT | 1677360 | 6888 | 112 | 1 |
simplelog write | 1939933 | 6304 | 112 | 1 |
simplelog write | 1922352 | 6938 | 112 | 1 |
go/ log | 1204039 | 9612 | 296 | 3 |
go/ log | 1362807 | 8875 | 296 | 3 |
Parallel 测试 3
ns/op | B/op | allocs/op | ||
---|---|---|---|---|
zap | 1000000 | 10331 | 336 | 6 |
zap | 1000000 | 10595 | 337 | 6 |
simplelog | 1352834 | 8838 | 296 | 3 |
simplelog | 1411458 | 8754 | 296 | 3 |
simplelog NoFORMAT | 2266597 | 5331 | 112 | 1 |
simplelog NoFORMAT | 2090455 | 5631 | 112 | 1 |
simplelog write | 2062870 | 5746 | 112 | 1 |
simplelog write | 2037792 | 5963 | 112 | 1 |
go/ log | 1260445 | 9398 | 280 | 3 |
go/ log | 1272560 | 9123 | 280 | 3 |
Parallel 测试 4
ns/op | B/op | allocs/op | ||
---|---|---|---|---|
zap | 1000000 | 10230 | 336 | 6 |
zap | 1000000 | 10276 | 337 | 6 |
simplelog | 1332555 | 8774 | 296 | 3 |
simplelog | 1391256 | 9226 | 296 | 3 |
simplelog NoFORMAT | 2154008 | 5483 | 112 | 1 |
simplelog NoFORMAT | 2115795 | 5853 | 112 | 1 |
simplelog write | 2059722 | 6069 | 112 | 1 |
simplelog write | 1968092 | 6116 | 112 | 1 |
go/ log | 1249767 | 9930 | 280 | 3 |
go/ log | 1211719 | 9822 | 280 | 3 |
打印各库输出结果 (其中一行)
2023-07-10T19:58:15.138+0800 DEBUG logtest/benchmark_test.go:82 >>>aaaaaaaaaaaaaaaaaaaaaaaaaaaaa [DEBUG]2023/07/10 19:58:57 benchmark_test.go:94: >>>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [DEBUG]2023/06/10 01:25:55.028277 log_test.go:46:>>>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [DEBUG]2023/06/10 01:25:55.028277 log_test.go:55:>>>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [debug]2023/07/10 20:00:53.634554 benchmark_test.go:125: >>>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
测试程序
从压测结果上看,zap与go-logger都是非常高效的日志库,效率已经非常接近直接调用底层io写文件数据。go-logger的write方法也正是直接调用底层接口写文件数据。
同样时常规打印时:
循环压测时:zap与go-logger大概比底层写数据慢30%,go-logger稍快,内存消耗方面go-logger需要分配的内存更少,分配的次数也比zap少一半。
在并发压测时,zap比底层大概慢90-100%,go-logger大概慢50-60%.
go-logger在非格式化打印时,性能与内存消耗,与直接调用底层写文件一样,没有多余消耗。
测试数据受环境因素影响,数据不能适用所有环境. 需要获取本地测试数据时,可以在本地跑一下测试数据 logtest