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. 增加各个日志级别格式化打印函数

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

示例

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

相關推薦

2023-10-09

go-logger v2.0.3发布,该版本主要针对性能进行优化.  github地址:https://github.com/donnie4w/go-logger  go的结构化日志库非常多,go-logger是比较早期开发的一个库, 以简洁为主要特征。simplelog是后期给数据库binlog日志开发的一个

2024-08-10

go-logger  是一个轻量级的日志库,提供了灵活的日志记录功能,方便在应用程序中实现不同级别的日志输出. 特点: 简单易用:go-logger 提供了一个简单直观的 API,使得开发者能够快速上手并集成到现有项目中。

2023-01-11

盖 #2591 (9a29f) 在报告 c8 覆盖率时验证扩展 #2626 (74463) 性能 提升 vi.mock 性能 #2594 (09d19) 更新公告:https://github.com/vitest-dev/vitest/releases/tag/v0.27.0

2022-07-07

b。 更新公告:https://github.com/thanos-io/thanos/releases/tag/v0.27.0

2023-05-15

go-logger 是golang 的极简日志库 日志打印:调用 Debug(),Info(),Warn(), Error() ,Fatal() 日志级别由低到高 级别概念 功能用法类似java日志工具log4j 或 python的logging 设置日志打印格式: 如: SetFormat(FORMAT_SHORTFILENAME|FORMAT_DATE|FORMA

2023-03-03

件中的 row group 的筛选精度 高效扫描: 多个 SST 间并发:同时扫描多个 SST 文件 单个 SST 内部并发:支持 Parquet 层并行拉取多个 row group 合并小 IO:针对 OSS 上的文件,合并小 IO 请求,提高拉取效率 本地 cache:缓

2023-07-05

时支撑在线与离线的业务负载、高吞吐的交互式分析与高并发的点查询;通过一套架构实现湖和仓的统一、在数据湖和多种异构存储之上提供无缝且极速的分析服务;也可通过对日志/文本等半结构化乃至非结构化的多模数据进

2023-09-05

意味着 HNSW 索引几乎不需要什么额外的维护工作:你可以并发写入/更新,增量维护,在不影响读写请求的前提下新建索引,也不用担心数据的变化会影响索引的质量。数据是持久化的,受到PITR时间点恢复的保护,并且可以使用

2022-11-30

Decision Support Benchmark),它由一套面向业务的特别查询和并发数据修改组成,查询和填充数据库的数据具有广泛的行业相关性。这个基准测试演示了检查大量数据、执行高度复杂的查询并回答关键业务问题的决策支持系统。TPC-H

2022-10-21

的问题,但是有些实现最好还是直接开发,这样才能达到性能和特殊的要求。   一个通用简单的协议开发和使用框架解决所有问题!ThingsPanel新设计的协议框架通过过程分段、组件分类的方式,通过更高级的抽象

2023-10-21

化对象存储 20 倍的性能。对于模型服务,Alluxio 提供超高并发性,在将离线训练集群中的模型用于在线推理时实现高达 10 倍的速度提升。 适合 AI 工作负载 I/O 模式的智能分布式缓存——Alluxio Enterprise AI 的分布式缓存功能使得

2022-06-24

gRPC 是可以在任何环境中运行的现代开源高性能 RPC 框架。gRPC 1.47.0 现已发布,包含了一些完善、改进和错误修复;具体更新内容如下: gRPC C++ 1.47.0 是第一个要求 C++14 的版本(提案)。对于现在无法升级到 C++14 的用户来说

2022-11-02

试基准来比较 Vite 和 Turbopack 在 HMR(模块热加载)方面的性能差异,并将测试方法和数据公开在 GitHub 仓库中 (https://github.com/yyx990803/vite-vs-next-turbo-hmr)。 最终的测试结果显示,Turbopack 的热加载速度确实比 Vite 快,但远远没有 10

2024-06-01

减少了fetch函数的内存占用,使其在处理大规模数据和高并发请求时更加高效。 结语 Bun团队在五月的三个版本更新中,通过修复大量bug、优化性能和提升稳定性,进一步增强了Bun作为现代JavaScript运行时的竞争力。特别是fetch内