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

怎么强制统一管理"日志"

  •  
  •   dzdh · 2022-06-22 14:39:38 +08:00 · 1598 次点击
    这是一个创建于 917 天前的主题,其中的信息可能已经有所发展或是发生改变。

    场景: 使用的包有 log.Println ,我自己的主程序也有。我有自己的日志格式输出等。但是三方包或内置包自己的 logPrintln 看的很烦。。。

    比如: http 包。有大量的logf(*request,format,...any)的调用,当然可以通过 server{ErrorLog 接管。但是有的包是不提供 log 接管。即便提供接管,有些 log 我不 care 不想让他显示在屏幕上或者日志文件里。

    这种情况,有没有什么办法能强制的所有的 log(write stdout/err)必须走某一个 func 过滤一遍?

    4 条回复    2022-06-22 15:07:12 +08:00
    Buges
        1
    Buges  
       2022-06-22 14:49:08 +08:00 via Android
    没办法,go 的 log 库默认用自带的 logger ,不能改,用别的 logger 得显示指定。tracing 那种才是正确的方式,都统一用一种接口产生 log ,subscriber 由 app 开发者自己指定。
    dzdh
        2
    dzdh  
    OP
       2022-06-22 14:56:17 +08:00
    @Buges 对像 rust 那样就好办多了 -_-
    janxin
        3
    janxin  
       2022-06-22 14:59:26 +08:00
    一般是放到 stdout, stderr 的话,比较邪典的做法是使用 syscall.Dup2 重定向 fd
    Buges
        4
    Buges  
       2022-06-22 15:07:12 +08:00 via Android
    @dzdh 谁让它“大道至简”呢。考虑用更“unix 哲学”的方式吧,全部用默认 logger ,外部用一个专门的程序再处理日志。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3050 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:39 · PVG 21:39 · LAX 05:39 · JFK 08:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.