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

2022-06-22 14:39:38 +08:00
 dzdh

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

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

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

1598 次点击
所在节点    Go 编程语言
4 条回复
Buges
2022-06-22 14:49:08 +08:00
没办法,go 的 log 库默认用自带的 logger ,不能改,用别的 logger 得显示指定。tracing 那种才是正确的方式,都统一用一种接口产生 log ,subscriber 由 app 开发者自己指定。
dzdh
2022-06-22 14:56:17 +08:00
@Buges 对像 rust 那样就好办多了 -_-
janxin
2022-06-22 14:59:26 +08:00
一般是放到 stdout, stderr 的话,比较邪典的做法是使用 syscall.Dup2 重定向 fd
Buges
2022-06-22 15:07:12 +08:00
@dzdh 谁让它“大道至简”呢。考虑用更“unix 哲学”的方式吧,全部用默认 logger ,外部用一个专门的程序再处理日志。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/861376

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX