go-logger v0.27.0 - 并发性能为官方库 10 倍

go-logger是一个高性能的 golang 日志库,旨在提供快速、轻量级的日志记录功能
Github
使用文档

v0.27.0 更新内容

  1. 优化内存分配
  2. 优化写数据性能
  3. 增加日志属性自定义函数
  4. 增加各个日志级别格式化打印函数

说明

性能优化是该版本最重要的更新内容。性能优化的结果:

  1. 极高并发性能:极高的并发写数据性能,比官方库或同类型日志库高10倍以上。特别在Linux环境中,性能比同类型日志库高30倍以上.
  2. 极低内存占用:是官方库与同类型日志库的几分之一

由于压测数据篇幅过长,可以通过 使用文档 或 《go日志库性能基准压力测试:go-logger+slog+zap+log》 查看

如果应用场景为高并发场景,非常建议适用go-logger作为日志库工具,特别是在高并发场景中,需要记录大量日志,或需要调试的情况下,go-logger的并发高效性,使得开启日志记录时,即使大量记录日志数据,也不会影响项目整体性能,项目的正常服务功能可以正常运作。

注意:在实际部署前,还是建议进行充分的测试,确保其满足特定应用的需求。


以下新增功能说明:
1. 增加日志属性自定义函数 AttrFormat

 通过 AttrFormat 可以对日志的各个属性标识进行自定义格式化设置

示例1:

 func Test_AttrFormat(t *testing.T) {attrformat := &logger.AttrFormat{SetLevelFmt: func(level logger.LEVELTYPE) string {switch level {case logger.LEVEL_DEBUG:return "debug:"case logger.LEVEL_INFO:return "info:"case logger.LEVEL_WARN:return "warn:"case logger.LEVEL_ERROR:return "error>>>>"case logger.LEVEL_FATAL:return "[fatal]"default:return "[unknown]"}},SetTimeFmt: func() (string, string, string) {s := time.Now().Format("2006-01-02 15:04:05")return s, "", ""},}logger.SetOption(&logger.Option{AttrFormat: attrformat, Console: true, FileOption: &logger.FileTimeMode{Filename: "testlogtime.log", Maxbuckup: 3, IsCompress: false, Timemode: logger.MODE_MONTH}})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)
}

执行结果:

debug:2024-10-26 12:03:21 0_27_0_test.go:33 this is a debug message1111111111111111111
info:2024-10-26 12:03:21 0_27_0_test.go:34 this is a info message2222222222222222222
warn:2024-10-26 12:03:21 0_27_0_test.go:35 this is a warn message33333333333333333
error>>>>2024-10-26 12:03:21 0_27_0_test.go:36 this is a error message4444444444444444444
[fatal]2024-10-26 12:03:21 0_27_0_test.go:37 this is a fatal message555555555555555555

说明:修改了 LEVEL的标识 与时间的格式


示例2

func Test_AttrFormat2(t *testing.T) {attrformat := &logger.AttrFormat{SetBodyFmt: func(level logger.LEVELTYPE, bs []byte) []byte {//处理日志末尾换行符if size := len(bs); bs[size-1] == '\n' {bs = append(bs[:size-1], []byte("\x1b[0m\n")...)} else {bs = append(bs, []byte("\x1b[0m\n")...)}switch level {case logger.LEVEL_DEBUG:return append([]byte("\x1b[34m"), bs...)case logger.LEVEL_INFO:return append([]byte("\x1b[32m"), bs...)case logger.LEVEL_WARN:return append([]byte("\x1b[33m"), bs...)case logger.LEVEL_ERROR:return append([]byte("\x1b[31m"), bs...)case logger.LEVEL_FATAL:return append([]byte("\x1b[41m"), bs...)default:return bs}},}logger.SetOption(&logger.Option{AttrFormat: attrformat, Console: true, FileOption: &logger.FileTimeMode{Filename: "testlogtime.log", Maxbuckup: 3, IsCompress: false, Timemode: logger.MODE_MONTH}})logger.Debug("this is a debug message:", 111111111111111110)logger.Info("this is a info message:", 222222222222222220)logger.Warn("this is a warn message:", 333333333333333330)logger.Error("this is a error message:", 4444444444444444440)logger.Fatal("this is a fatal message:", 5555555555555555550)
}

执行结果


2. 增加各个日志级别格式化打印函数

通过 DebugfInfofWarnfErrorfFatalf 等函数,支持在打印函数中使用 % 符号,用于指定输出格式化模式。

示例

func Test_format(t *testing.T) {logger.Debugf("this is a debugf message:%d", 1)logger.Infof("this is a infof message:%s", "hi,logger")logger.Warnf("this is a warnf message:%x,%x", 14, 15)logger.Errorf("this is a errorf message:%f", 44.4444)logger.Fatalf("this is a fatalf message:%t", true)logger.Debugf("this is a debugf message:%p", new(int))
}

执行结果

[DEBUG]2024/10/26 12:08:55 0_27_0_test.go:74 this is a debugf message:1
[INFO]2024/10/26 12:08:55 0_27_0_test.go:75 this is a infof message:hi,logger
[WARN]2024/10/26 12:08:55 0_27_0_test.go:76 this is a warnf message:e,f
[ERROR]2024/10/26 12:08:55 0_27_0_test.go:77 this is a errorf message:44.444400
[FATAL]2024/10/26 12:08:55 0_27_0_test.go:78 this is a fatalf message:true
[DEBUG]2024/10/26 12:08:55 0_27_0_test.go:79 this is a debugf message:0xc00000a938

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/936.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【华为HCIP实战课程31(完整版)】中间到中间系统协议IS-IS路由汇总详解,网络工程师

一、IS-IS的汇总 1、可以有效减少在LSP中发布的路由条目,减小对系统资源的占用。 2、会减少LSP报文的扩散,接收到该LSP报文的其他设备路由表中只会出现一条聚合路由。 3、可以避免网络中的路由震荡,提高了网络的稳定性。 4、被聚合的路由可以是IS-IS路由,也可以是被引入…

邮件发送excel带预览excel功能

excel 打开后的内容: 思路: 1、邮件发送excel 是作为附件发送出去的; 2、excel 预览是,必须另外点击预览按钮,并不能直接预览邮件内容然后在邮件主体内容展示出来 根据以上两点基本没法实现 邮件发送后邮件自带 预览功能。 伪方法…

HCIA(DHCP服务)

第三节 开启DHCP服务 创建地址池 调用全局服务 [R1]dhcp enable 开启DHCP服务 [R1]ip pool AA 创建地址池 [R1-ip-pool-AA]network 192.168.1.0 mask 24 写入网段 [R1-ip-pool-AA]gateway-list 192.168.1.1 写入网关 [R1-ip-pool-AA]dns-list 8.8.8.8 114.1…

java项目之文理医院预约挂号系统源码(springboot)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的文理医院预约挂号系统。项目源码以及部署相关请联系风歌,文末附上联系信息。 项目简介: 本系统的使用角色可…

A4-C四驱高防变电站巡检机器人

在电力行业数字化、智能化转型进程中,搭载多模态成像传感器的变电站巡检机器人、视频监控设备逐渐取代传统人工,成为变电设备状态监测的主要工具。变电站巡检机器人具有全天候、非接触式、多参量测量等特点,结合内置人工智能算法完成仪表识别…

【华为HCIP实战课程三十】中间到中间系统协议IS-IS路由渗透及TAG标识详解,网络工程师

一、路由泄露 1、默认情况Level 1不会学到Level2的明细路由,L2可以学到L1的明细路由 2、FIB数据转发,路由负载,通过随机数据中的五元组hash,hash值决定数据走哪条链路 R1设备ping和telnet通过抓包查看走的都是S1/0/0接口 抓包进行过滤;ip.a…

面向对象三大特征之一:封 装

1、特点 封装是面向对象的核心思想,两层含义:一是一个整体(把对象的属性和行为看成一个整体,即封装在一个对象种),二是信息隐藏,对外隐藏,但可以通过某种方式进行调用。 2、访问权…

引领汽车行业未来,3D数字化技术如何改变汽车行业?

新能源汽车行业加速发展,新车型密集发布,汽车保有量和车龄的增加,也同时点燃了汽车后市场的增长引擎。对于车企而言,如何全方面优化汽车从研发、生产、售后到营销的各个环节,以便适应快速变化的市场需求? 1…

使用MongoDB Atlas构建无服务器数据库

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 使用MongoDB Atlas构建无服务器数据库 MongoDB Atlas 简介 注册账户 创建集群 配置网络 设置数据库用户 连接数据库 设计文档模式…

萌熊数据科技:剑指脑机转入,开启科技新篇章

近日,科技圈传来一则令人瞩目的消息,天津萌熊数据科技有限公司和天津一万年科技发展有限公司在全国范围内大力开展AI加生命科学的主体业务,并明确将朝着脑机转入方向深入发展,引发了行业内外的广泛关注。 天津萌熊数据科技有限公司…

【云备份项目】json以及jsoncpp库的使用

目录 1.JSON 2.什么是 JSON? 3.JSON 发展史 4.为什么要使用 JSON? 5.JSON 的不足 6.JSON 应该如何存储? 7.什么时候会使用 JSON 7.1.定义接口 7.2.序列化 7.3.生成 Token 7.4.配置文件 8.JSON的语法规则 8.1.对象和数组 8.2.JS…

动态规划-两个数组的dp问题——1035.不相交的线

1.题目解析 题目来源:1035.不相交的线 测试用例 2.算法原理 本题实质上就是寻找两个数组的最长公共子序列,所以可以直接移步到 最长公共子序列 的解析博客,那里更加详细的介绍了如何处理最长公共子序列的判断 1.状态表示 由题目可知是两个…

Android13开发恢复出厂设置默认打开WiFi

案例: 测试要求系统恢复出场设置的时候,默认WiFi打开 代码 找到def_wifi_on,将它修改为true即可 修改路径:QSSI.13/packages/services/Car/car_product/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults.xml

Spring Boot框架下校园社团信息管理的优化策略

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理校园社团信息管理系统的相关信息成为必然。…

MySql基础:数据类型

目录 1. 数据类型的整体分类 2. 整数数据类型 2.1 TINYINT 类型 2.2 bit 类型 2.3 小数类型 2.3.1 float 2.3.2 decimal 2.4 字符串类型 2.4.1 char 2.4.3 varchar 2. 5 日期和时间类型 2.6 enum和set类型 补充: 1. 数据类型的整体分类 说明:在…

【测试工具】通过Jmeter压测存储过程

目录 一、存储过程准备1.1、 建立空表1.2、 建立存储过程1.3、调试 二、测试工具准备三、工具配置及执行3.1、配置JDBC Connection Configuration:3.2、配置吞吐量控制器3.3、配置JDBC Request 一、存储过程准备 1.1、 建立空表 CREATE TABLE test_data ( id NUMB…

探讨Facebook的AI研究:未来社交平台的技术前瞻

在数字时代,社交媒体已成为人们日常生活的重要组成部分。作为全球最大的社交网络之一,Facebook不断致力于人工智能(AI)的研究与应用,以提升用户体验、增强平台功能并推动技术创新。本文将探讨Facebook在AI领域的研究方…

二百七十五、Kettle——ClickHouse增量导入数据补全以及数据修复记录表数据(实时)

一、目的 在完成数据修复后,需要生成修复记录 二、Hive中原有代码 2.1 表结构 --52、数据补全以及数据修复记录表 dwd_data_correction_record create table if not exists hurys_db.dwd_data_correction_record(data_type int comment 数据类型…

无人机之集群控制方法篇

无人机的集群控制方法涉及多个技术和策略,以确保多架无人机能够协同、高效地执行任务。以下是一些主要的无人机集群控制方法: 一、编队控制方法 领航-跟随法(Leader-Follower) 通过设定一架无人机作为领航者(长机&am…

第02章 MySQL环境搭建

一、MySQL的卸载 如果安装mysql时出现问题,则需要将mysql卸载干净再重新安装。如果卸载不干净,仍然会报错安装不成功。 步骤1:停止MySQL服务 在卸载之前,先停止MySQL8.0的服务。按键盘上的“Ctrl Alt Delete”组合键&#xff0…