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 · 55 天前 · 2724 次点击
    这是一个创建于 55 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

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

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