在自己写一个 demo 项目的时候, go 中好像没有 Java 中的 SLF4J 这样统一的日志接口. 在碰到引用第三方的包(像 viper)中使用的日志, 这样日志是不是就是分散的.
![]() |
1
totoro52 55 天前
go 的日志一直是个大问题
|
2
Ayanokouji 55 天前
go 的 log 和 error ,一言难尽,只能多体会,没有统一解决方案
|
![]() |
3
javalaw2010 55 天前 ![]() 一般完善一点的库都有设置 logger 的接口,你可以用自己喜欢的 log 库,实现别人的接口然后 set 进去。
go 的标准库其实提供了统一的 logger 接口和实现 slog ,但是历史遗留比较多,很多人不愿意用。 go 本身语言特性不是很丰富,所以写代码讲究一个随心所欲,快糙猛就是干,宗旨就是能跑就行。 |
![]() |
4
BenHunDun OP |
5
Ayanokouji 55 天前
@BenHunDun 完全不关注,而且一些 lib 压根就没有日志,你要关心的可能就是 web 框架的日志
|
![]() |
7
BenHunDun OP 很感谢回答, 自己再自身多感受 go 中 log 使用
|
8
tairan2006 55 天前 via Android ![]() 你现在的话就用 slog 完事
但是之前有很多第三方 log 库,就比较乱 |
![]() |
9
lekai63 55 天前
go 自己的 log 够用,但又似乎没那么好用。—— 也许是我不会用
反正还是用 viper 吧 |
10
sthwrong 55 天前 ![]() 标准库已经有了 slog ,相对比较通用的第三方也有 zap ,有日志需求的库一般也有 logger 接口也可以根据需求传入自己的 logger 。
|
12
lizhisty 55 天前
用 zap 吧
|
![]() |
13
CapNemo 55 天前
确实是大坑,每个库的 logger 接口都不太一致,需要分别兼容。
|
![]() |
14
pkoukk 55 天前
大部分库都不产生 log ,因为有啥问题 error 就丢给你了,让你自己打
部分 db 或者 web 框架需要你适配个 logger interface 丢进去,比较麻烦,不过好在就只用写一次,以后直接搬就好了 |
![]() |
15
BenHunDun OP @tairan2006 @lekai63 @sthwrong
有搜索到 slog 和 zap, 后续会多去了解. @pkoukk 认真想 Java 其实也是用这种方法解决, 很多都是有另外的包转成 SLF4J , 然后再统一使用日志实现. Java 常用的内容生态已经成熟了, 用习惯了没有能够反应过来. 简单询问 AI 好像 zap 是想要找的东西. 后面学习差不多了, 仔细了解一下. |
16
xjzshttps 55 天前
go 官方最开始提供的日志接口太烂了,根本没人用。
然后就百花齐放的出了很多第三方日志库。 现在 go 官方出了标准的日志接口 slog ,但是太晚了,普及起来感觉会很慢。 我跟人建议,新项目就按照 slog 接口,底层自己用 zap 之类的库。 |
![]() |
17
xxxccc 55 天前
golang logger 是我学 golang 的时候遇到最恶心的东西,尤其各种第三方 client ,一人一个 logger 接口
|
![]() |
18
ipwx 55 天前
1. go 的几个主要日志库都可以互相套娃做 sink
2. go 库不太喜欢乱写日志,常见的是乱扔 error 。不过你可以用 errorx 把别人的 error 包一层,保留上下文信息方便调试。 |