调试代码时,你是不是也这样:fmt.Println("here")、fmt.Println("here 2")、fmt.Println("HEREEEEEEE")……提交记录里全是这种痕迹。短期项目没问题,但一旦服务跑久了,这种习惯就撑不住了。你需要结构化、分级、能持久化的日志。下面这五个Go日志库,各自有看家本领。
Zap:性能偏执狂的首选
![]()
Uber出品的Zap,核心卖点是零内存分配。它提供两种模式:Logger(强类型字段,零分配快速路径)和SugaredLogger(稍慢但更灵活)。
它的标志性功能是AtomicLevel——运行时动态切换日志级别,无需重启服务。配上HTTP接口,五代码就能实现"生产环境开Debug"的开关。适合高吞吐场景,对每微秒延迟都敏感的项目。如果你只是想打印完睡觉,它有点重。
Logrus:结构化日志的"老好人"
Sirupsen的Logrus,2万+星,是Go生态里结构化日志的标杆。API设计极友好,字段用WithField链式添加,输出格式可换JSON或纯文本。Hooks机制是它的特色——日志能自动触发外部动作,比如出错时发Slack、写Kafka。性能不是顶尖,但开发体验丝滑,适合快速迭代的业务代码。
Zerolog:JSON日志的极简主义者
由rs/zerolog维护,设计哲学就一个字:快。API链式调用,全程零分配,输出纯JSON。没有SugaredLogger的妥协,也没有花哨功能。它的Event模式让日志构建像流水线:logger.Info().Str("user", "alice").Int("status", 200).Msg("ok")。适合微服务架构,日志直接进ELK或Loki,解析零摩擦。
Slog:Go官方的标准答案
Go 1.21内置的slog,终结了"该用哪个第三方库"的纠结。设计参考了Zap和Zerolog的优点,原生支持结构化日志,同时保持标准库的简洁。Handler接口可自定义输出目标,LevelVar实现动态级别调整——和Zap的AtomicLevel类似,但更"Go风格"。新项目首选,老项目迁移也有官方指南。
Kitlog:微服务工具包的配套选手
Go kit的日志组件,本身不追求功能全面,而是强调可组合性。它把日志当作接口(Logger),具体实现可插拔——用Zap、Logrus或标准库都行。适合已经用Go kit搭建服务的团队,保持技术栈一致性。单独用的话,配置成本偏高。
选哪个?性能敏感选Zap或Zerolog,开发效率优先选Logrus,求稳用Slog,已有Go kit生态考虑Kitlog。至少,别再fmt.Println("why")了。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.