相关主题
{{discussion.title}}
最牛社区
首页
新主题
新回复
热门
注册
登录
原 Java 刚学习 go, 自己在写项目, 针对 go 日志方面的疑惑
{{ getUsernameByUid(9267) }}
发布{{ getTimeInfo('2025-03-14 12:32:00') }}
#0
{{ getUsernameByUid(9267) }}
发布{{ getTimeInfo('2025-03-14 12:32:00') }}
#0
在自己写一个 demo 项目的时候,go 中好像没有 J**a 中的 SLF4J 这样统一的日志接口.在碰到引用第三方的包(像 viper)中使用的日志, 这样日志是不是就是分散的.
{{ getUsernameByUid(9207) }}
发布{{ getTimeInfo('2025-03-14 12:35:54') }}
#1
{{ getUsernameByUid(9207) }}
发布{{ getTimeInfo('2025-03-14 12:35:54') }}
#1
go 的日志一直是个大问题
{{ getUsernameByUid(4234) }}
发布{{ getTimeInfo('2025-03-14 12:39:00') }}
#2
{{ getUsernameByUid(4234) }}
发布{{ getTimeInfo('2025-03-14 12:39:00') }}
#2
go 的 log 和 error ,一言难尽,只能多体会,没有统一解决方案
{{ getUsernameByUid(6008) }}
发布{{ getTimeInfo('2025-03-14 12:39:32') }}
#3
{{ getUsernameByUid(6008) }}
发布{{ getTimeInfo('2025-03-14 12:39:32') }}
#3
一般完善一点的库都有设置 logger 的接口,你可以用自己喜欢的 log 库,实现别人的接口然后 set 进去。
go 的标准库其实提供了统一的 logger 接口和实现 slog ,但是历史遗留比较多,很多人不愿意用。
go 本身语言特性不是很丰富,所以写代码讲究一个随心所欲,快糙猛就是干,宗旨就是能跑就行。
{{ getUsernameByUid(9267) }}
发布{{ getTimeInfo('2025-03-14 12:41:13') }}
#4
{{ getUsernameByUid(9267) }}
发布{{ getTimeInfo('2025-03-14 12:41:13') }}
#4
因为没有接触过实际项目, 这样的话, 是不是在实际开发时, 第三方包如果没有出问题, 并不会过多的去关注第三方包的 log
{{ getUsernameByUid(4234) }}
发布{{ getTimeInfo('2025-03-14 12:42:22') }}
#5
{{ getUsernameByUid(4234) }}
发布{{ getTimeInfo('2025-03-14 12:42:22') }}
#5
完全不关注,而且一些 lib 压根就没有日志,你要关心的可能就是 web 框架的日志
{{ getUsernameByUid(9207) }}
发布{{ getTimeInfo('2025-03-14 12:43:30') }}
#6
{{ getUsernameByUid(9207) }}
发布{{ getTimeInfo('2025-03-14 12:43:30') }}
#6
正规的包大部分不会输出 log 的,除非是成型的第三方组件的,反正百花齐放就对了
{{ getUsernameByUid(9267) }}
发布{{ getTimeInfo('2025-03-14 12:45:13') }}
#7
{{ getUsernameByUid(9267) }}
发布{{ getTimeInfo('2025-03-14 12:45:13') }}
#7
很感谢回答, 自己再自身多感受 go 中 log 使用
{{ getUsernameByUid(90) }}
发布{{ getTimeInfo('2025-03-14 13:41:25') }}
#8
{{ getUsernameByUid(90) }}
发布{{ getTimeInfo('2025-03-14 13:41:25') }}
#8
你现在的话就用 slog 完事
但是之前有很多第三方 log 库,就比较乱
{{ getUsernameByUid(3005) }}
发布{{ getTimeInfo('2025-03-14 13:43:04') }}
#9
{{ getUsernameByUid(3005) }}
发布{{ getTimeInfo('2025-03-14 13:43:04') }}
#9
go 自己的 log 够用,但又似乎没那么好用。—— 也许是我不会用
反正还是用 viper 吧
{{ getUsernameByUid(9209) }}
发布{{ getTimeInfo('2025-03-14 13:50:11') }}
#10
{{ getUsernameByUid(9209) }}
发布{{ getTimeInfo('2025-03-14 13:50:11') }}
#10
标准库已经有了 slog ,相对比较通用的第三方也有 zap ,有日志需求的库一般也有 logger 接口也可以根据需求传入自己的 logger 。
{{ getUsernameByUid(3005) }}
发布{{ getTimeInfo('2025-03-14 13:53:25') }}
#11
{{ getUsernameByUid(3005) }}
发布{{ getTimeInfo('2025-03-14 13:53:25') }}
#11
感谢!原来有 slog 了。。我实在太更不上时代了。。只用上了 ServeMUX 。 之前完全不知道 slog 原来都出来一年多了 !
{{ getUsernameByUid(9268) }}
发布{{ getTimeInfo('2025-03-14 13:55:50') }}
#12
{{ getUsernameByUid(9268) }}
发布{{ getTimeInfo('2025-03-14 13:55:50') }}
#12
用 zap 吧
{{ getUsernameByUid(8381) }}
发布{{ getTimeInfo('2025-03-14 13:56:12') }}
#13
{{ getUsernameByUid(8381) }}
发布{{ getTimeInfo('2025-03-14 13:56:12') }}
#13
确实是大坑,每个库的 logger 接口都不太一致,需要分别兼容。
{{ getUsernameByUid(452) }}
发布{{ getTimeInfo('2025-03-14 15:13:41') }}
#14
{{ getUsernameByUid(452) }}
发布{{ getTimeInfo('2025-03-14 15:13:41') }}
#14
大部分库都不产生 log ,因为有啥问题 error 就丢给你了,让你自己打
部分 db 或者 web 框架需要你适配个 logger interface 丢进去,比较麻烦,不过好在就只用写一次,以后直接搬就好了
{{ getUsernameByUid(9267) }}
发布{{ getTimeInfo('2025-03-14 15:35:28') }}
#15
{{ getUsernameByUid(9267) }}
发布{{ getTimeInfo('2025-03-14 15:35:28') }}
#15
有搜索到 slog 和 zap, 后续会多去了解.
认真想 J**a 其实也是用这种方法解决, 很多都是有另外的包转成 SLF4J , 然后再统一使用日志实现.
J**a 常用的内容生态已经成熟了, 用习惯了没有能够反应过来.
简单询问 AI 好像 zap 是想要找的东西. 后面学习差不多了, 仔细了解一下.
{{ getUsernameByUid(5793) }}
发布{{ getTimeInfo('2025-03-14 15:47:30') }}
#16
{{ getUsernameByUid(5793) }}
发布{{ getTimeInfo('2025-03-14 15:47:30') }}
#16
go 官方最开始提供的日志接口太烂了,根本没人用。
然后就百花齐放的出了很多第三方日志库。
现在 go 官方出了标准的日志接口 slog ,但是太晚了,普及起来感觉会很慢。
我跟人建议,新项目就按照 slog 接口,底层自己用 zap 之类的库。
{{ getUsernameByUid(5892) }}
发布{{ getTimeInfo('2025-03-14 18:04:35') }}
#17
{{ getUsernameByUid(5892) }}
发布{{ getTimeInfo('2025-03-14 18:04:35') }}
#17
golang logger 是我学 golang 的时候遇到最恶心的东西,尤其各种第三方 client ,一人一个 logger 接口
{{ getUsernameByUid(9269) }}
发布{{ getTimeInfo('2025-03-14 23:08:56') }}
#18
{{ getUsernameByUid(9269) }}
发布{{ getTimeInfo('2025-03-14 23:08:56') }}
#18
1. go 的几个主要日志库都可以互相套娃做 sink
2. go 库不太喜欢乱写日志,常见的是乱扔 error 。不过你可以用 errorx 把别人的 error 包一层,保留上下文信息方便调试。
{{ getUsernameByUid(post.updatedByUid) }}
编辑于 {{ getTimeInfo(post.UpdatedAt) }}
{{ getUsernameByUid(post.uid) }}
发布于 {{ getTimeInfo(post.CreatedAt) }}
# {{post.num}}
{{ getUsernameByUid(post.updatedByUid) }}
编辑于 {{ getTimeInfo(post.UpdatedAt) }}
{{ getUsernameByUid(post.uid) }}
发布于 {{ getTimeInfo(post.CreatedAt) }}
# {{post.num}}
{{ getUsernameByPostNum(post.mentionNum) }}
登录回复
#{{nav.post.anchor}}
{{ alert.text }}
关闭