V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
BenHunDun
V2EX  ›  Go 编程语言

原 Java 刚学习 go, 自己在写项目, 针对 go 日志方面的疑惑

  •  
  •   BenHunDun · 2025 年 3 月 14 日 · 3415 次点击
    这是一个创建于 315 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在自己写一个 demo 项目的时候, go 中好像没有 Java 中的 SLF4J 这样统一的日志接口. 在碰到引用第三方的包(像 viper)中使用的日志, 这样日志是不是就是分散的.

    18 条回复    2025-03-14 23:08:56 +08:00
    MIUIOS
        1
    MIUIOS  
       2025 年 3 月 14 日
    go 的日志一直是个大问题
    Ayanokouji
        2
    Ayanokouji  
       2025 年 3 月 14 日
    go 的 log 和 error ,一言难尽,只能多体会,没有统一解决方案
    javalaw2010
        3
    javalaw2010  
       2025 年 3 月 14 日   ❤️ 2
    一般完善一点的库都有设置 logger 的接口,你可以用自己喜欢的 log 库,实现别人的接口然后 set 进去。
    go 的标准库其实提供了统一的 logger 接口和实现 slog ,但是历史遗留比较多,很多人不愿意用。

    go 本身语言特性不是很丰富,所以写代码讲究一个随心所欲,快糙猛就是干,宗旨就是能跑就行。
    BenHunDun
        4
    BenHunDun  
    OP
       2025 年 3 月 14 日
    @Ayanokouji @totoro52
    因为没有接触过实际项目, 这样的话, 是不是在实际开发时, 第三方包如果没有出问题, 并不会过多的去关注第三方包的 log
    Ayanokouji
        5
    Ayanokouji  
       2025 年 3 月 14 日
    @BenHunDun 完全不关注,而且一些 lib 压根就没有日志,你要关心的可能就是 web 框架的日志
    MIUIOS
        6
    MIUIOS  
       2025 年 3 月 14 日
    @BenHunDun 正规的包大部分不会输出 log 的,除非是成型的第三方组件的,反正百花齐放就对了
    BenHunDun
        7
    BenHunDun  
    OP
       2025 年 3 月 14 日
    很感谢回答, 自己再自身多感受 go 中 log 使用
    tairan2006
        8
    tairan2006  
       2025 年 3 月 14 日 via Android   ❤️ 1
    你现在的话就用 slog 完事

    但是之前有很多第三方 log 库,就比较乱
    lekai63
        9
    lekai63  
       2025 年 3 月 14 日
    go 自己的 log 够用,但又似乎没那么好用。—— 也许是我不会用

    反正还是用 viper 吧
    sthwrong
        10
    sthwrong  
       2025 年 3 月 14 日   ❤️ 1
    标准库已经有了 slog ,相对比较通用的第三方也有 zap ,有日志需求的库一般也有 logger 接口也可以根据需求传入自己的 logger 。
    lekai63
        11
    lekai63  
       2025 年 3 月 14 日
    @sthwrong

    感谢!原来有 slog 了。。我实在太更不上时代了。。只用上了 ServeMUX 。 之前完全不知道 slog 原来都出来一年多了 !
    lizhisty
        12
    lizhisty  
       2025 年 3 月 14 日
    用 zap 吧
    CapNemo
        13
    CapNemo  
       2025 年 3 月 14 日
    确实是大坑,每个库的 logger 接口都不太一致,需要分别兼容。
    pkoukk
        14
    pkoukk  
       2025 年 3 月 14 日
    大部分库都不产生 log ,因为有啥问题 error 就丢给你了,让你自己打
    部分 db 或者 web 框架需要你适配个 logger interface 丢进去,比较麻烦,不过好在就只用写一次,以后直接搬就好了
    BenHunDun
        15
    BenHunDun  
    OP
       2025 年 3 月 14 日
    @tairan2006 @lekai63 @sthwrong
    有搜索到 slog 和 zap, 后续会多去了解.

    @pkoukk
    认真想 Java 其实也是用这种方法解决, 很多都是有另外的包转成 SLF4J , 然后再统一使用日志实现.
    Java 常用的内容生态已经成熟了, 用习惯了没有能够反应过来.

    简单询问 AI 好像 zap 是想要找的东西. 后面学习差不多了, 仔细了解一下.
    xjzshttps
        16
    xjzshttps  
       2025 年 3 月 14 日
    go 官方最开始提供的日志接口太烂了,根本没人用。
    然后就百花齐放的出了很多第三方日志库。

    现在 go 官方出了标准的日志接口 slog ,但是太晚了,普及起来感觉会很慢。

    我跟人建议,新项目就按照 slog 接口,底层自己用 zap 之类的库。
    xxxccc
        17
    xxxccc  
       2025 年 3 月 14 日
    golang logger 是我学 golang 的时候遇到最恶心的东西,尤其各种第三方 client ,一人一个 logger 接口
    ipwx
        18
    ipwx  
       2025 年 3 月 14 日
    1. go 的几个主要日志库都可以互相套娃做 sink
    2. go 库不太喜欢乱写日志,常见的是乱扔 error 。不过你可以用 errorx 把别人的 error 包一层,保留上下文信息方便调试。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2309 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 00:41 · PVG 08:41 · LAX 16:41 · JFK 19:41
    ♥ Do have faith in what you're doing.