高性能日志库go-logger v2.0.3

donnie · · 2237 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

> [来源:《高性能日志库go-logger v2.0.3》](https://tlnet.top/article/22425096) go-logger v2.0.3发布,该版本主要针对性能进行优化. [github地址:https://github.com/donnie4w/go-logger ](https://github.com/donnie4w/go-logger) go的结构化日志库非常多,[go-logger](https://github.com/donnie4w/go-logger)是比较早期开发的一个库, 以简洁为主要特征。[simplelog](https://github.com/donnie4w/simplelog)是后期给数据库binlog日志开发的一个日志库,由于功能与go-logger有重合,就把两个库的代码就合并了。目前两个库代都会一起更新,实现是一致的。 go1.21版本就在标准库加上结构化日志库log/slog,该日志库性能非常优越,根据压测结果,slog的性能要比社区常用的第三方结构化日志库好许多,所以大部分项目日志库可以直接使用slog。 **go-logger 将继续维护,原因是:** 1. **go-logger 比slog占用更少的内存,效率比slog更高** 2. **go-logger 对日志文件处理,如 日志文件按大小切分备份,按日期:月,日,时切分备份,日志文件压缩备份,日志文件限制最大文件数等特性,目前slog还不具备这些特征。** [go-logger 函数文档](https://tlnet.top/simplelogfunc) ---------- #### **性能测试数据:** **![](https://tlnet.top/f/1696141149_1696133036.jpg)** **输出数据:** 2023-09-30T17:37:15.008+0800 DEBUG logtest/benchmark_test.go:103 >>>aaaaaaaaaaaaaaaaaaaaaaaaaaaaa [DEBUG]2023/09/30 17:37:19 benchmark_test.go:115: >>>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 time=2023-09-30T17:37:38.395+08:00 level=INFO source=benchmark_test.go:164 msg=>>>aaaaaaaaaaaaaaaaaaaaaaa **参数说明:** * **ns/op: 每执行一次消耗的时间** * **B/op:每执行一次消耗的内存** * **allocs/op:每执行一次分配内存次数** #### **结果说明:** 1. **不同日志库输出的数据大小是一致的** 2. **Zap:uber 官方go日志库,测试中是 常规格式(包含文件名行号) debug日志输出** 3. **Logger:go-logger 测试中是 常规格式(包含文件名行号) debug日志输出** 4. **LoggerNoFORMAT: 为go-logger去格式化日志输出** 5. **LoggerWrite: 为go-logger提供的原始数据高速写入文件的方法,原是 simplelog 高效输出数据库binlog日志数据的方法** 6. **Slog:官方 log/slog 测试为常规格式(包含文件名行号)info 日志输出** **可以看到 测试数据** * **时间消耗: go-logger 4500ns/op左右 , slog与zap大致在5600ns/op 左右** * **内存消耗:go-logger 64B , slog与zap大致在330ns/op 左右 ** * **不同机器跑测试程序会有不同的结果,这个主要是一个比较作用。** **测试结果:** 1. **性能 : go-logger > slog ≥ zap** 2. **内存消耗 : go-logger 远小于 slog 与 zap** **说明:go-logger 性能与内存上的优势,主要归功于其内存使用上的优化** #### **多次测试结果:** ![](https://tlnet.top/f/1696141691_1696133161.jpg) ![](https://tlnet.top/f/1696141697_1696133275.jpg) ![](https://tlnet.top/f/1696141701_1696133381.jpg) **对比可知,不同时间测试结果都相似** * **可以看到,这几个日志库的性能都非常高。可以根据项目的实际需求选择使用任一日志库。** * **如果对性能与内存要求苛刻或对日志文件备份处理有要求时, 建议使用[go-logger](https://github.com/donnie4w/go-logger)。** * **如果官方日志库slog已经能满足项目需求,建议使用slog,由官方维护的库总是靠谱的;对于一般业务来说:性能4500ns/op与5600ns/op 并无实质区别。** * **[go-logger](https://github.com/donnie4w/go-logger) 会持续进行优化和维护,包括功能与性能**. [测试程序](https://github.com/donnie4w/test/tree/main/logtest) ---------- 有任何问题或建议请Email:donnie4w@gmail.com或 https://tlnet.top/contact 发信给我,谢谢!

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2237 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传