公司的架构师要求把日志封装成 LogUtil 类,提供 sdk 给各团队使用,并且不允许使用 slf4j 直接打印日志,请问各位这么做有哪些好处(我还没想到任何好处)?

270 天前
 WillingXyz

所有的日志打印都通过 LogUtil 类,并且日志上还得加上 code 来区分,比如 LogUtil.info("code101", "xxx")。 不能直接使用 slf4j 的 log.info("xxx")。

我完全不能理解这种操作,和他讨论了很多次,我觉得这样没有任何好处,因为 slf4j 本来就是一个门面,并且 logback 等实现提供了 Filter ,Coverter ,Appender 等扩展,完全可以通过 logback 来实现扩展,而不是侵入业务代码,并且业务也很难都改成这种方式啊。

他说是为了统一入口,便于以后扩展。但给不出具体的例子。工作了十几年了,都没产生好处,还要坚持封装。

ps:此人是我 leader 的 leader 。

请问:封装成 LogUtil 是否真的有好处,且相比 logback 扩展实现的更好,只是我没有想到,欢迎各位指点

16519 次点击
所在节点    程序员
145 条回复
CloveAndCurrant
270 天前
@meeop 你想多了,出了事架构师不可能负责的,logUtil 又不是架构师开发的,是架构师让你开发的,“不是我领导无方,而是你能力不行”。
dcsuibian
270 天前
假设确定了要写,那么大概有两种方案。

一、第一种方案,就是 LogUtil 内部调用其他日志框架来打日志。

1.1 、这就引入一个致命问题,就是类信息怎么传过来?你看哦,日志框架其实是需要在类里生成一个`private static final Logger log = LoggerFactory.getLogger(所在类.class);`所以打印的时候,才能打印出是哪个类的问题,但此时你是 LogUtil 来打印,那么所有的日志都会变成 LogUtil 的日志。怎么解决这个问题?

1.2 、第二个问题,如果我没封装,那日志框架出了问题(比如上次的 log4j2 漏洞),就是日志框架的问题。但如果我封装了 LogUtil ,那此时就是写 LogUtil 的人的问题。因为是你选择了内部要调用其它日志框架。

二、第二种方案,就是不调用其他日志框架。哦我的上帝啊,那样就会引入更多问题。

你得写自己的 Logger 、LoggerFactory 、 设计自己的 logback.xml 等等,最终还就是自己做了一个日志框架。

还有最终的致命问题,你程序里写的日志可以改成调用 LogUtil 的,那调用的第三方 jar 包里写的日志你怎么控制?



把这些问题抛给你 leader 的 leader ,让他解决
YiXinCoding
270 天前
这波架构师在大气层啊,这样大家都有活干,有绩效,对项目影响又不大。
防御性编程,如果再加上不写文档,Code 自己拿小本本记着,那是绝杀。
换别人排查日志定位不到问题,自己一看就能定位,建立壁垒,避免了被取代裁员。
(透过现象看本质,到了这个级别,追求的不是什么扩展性和实用性了,而是利益了)
xiangbohua
270 天前
我觉得还是有好处的,只是是什么阶段什么时候做合不合适的问题。
也不要觉得做这个事情的目的想的那么功利,本来加薪就是要做事情。(前提是别搞幺蛾子比如大家明明忙不过来还要搞这种事情)
是真的有些人是想在代码上面有写追求的,哪怕公司没有加薪计划。
所以遇到这种事情,你不明白的话就问问他这么做的目的,让他给你解释解释,相当于请教一下(也可以学学领导的思维方式,也有好处),如果他跟你解释了你还是不能理解,那就问问他应该怎么实现,然后按照他的想法去实现就行,退一万步讲,写代码的写什么代码不是写?
我主要还是说这件事情本身,如果做这个事情的过程比较恶心,那我觉得是另外一个范畴的问题了。
zjiajun
270 天前
站在顶层看,封装是没任何问题的,但也不一定是要封装的,封装后的优点如下:

- 统一日志框架版本。举例,log4j 漏洞升级版本,那就不用每个项目都修改一遍了

- 统一定义日志格式,方便搜集/格式化/分析/告警/数据看板等等

- 并不是所有人都知道 slf4j 是门面,有的应用日志框架实现是 log4j2 、有的是 logback ,当然统一最好啦

- 增强 code 我理解为,提升可维护性
ffyyhh
270 天前
现在你们有做日志采集吗,比如采集槽 ELK ,如何有的话,统一日志是有必要的
liberize
270 天前
新项目可以理解,改现有的没有必要
MoYi123
270 天前
个人经验, 工作中看到 “封装” 这个 2 个字就没好事.
zizon
270 天前
你的 slf4j 方案有办法让人不带上 code101 就编译不了么?
nl101531
270 天前
统一是好的,遇到过匿名化诉求,这个时候统一好处就来了
leconio
270 天前
新需求,把所有 info 日志加埋点。or 这个日志性能太差了,灰度换其他的。评估下工作量
highkay
270 天前
讲不清楚真正的具有说服力的优点的基本上说明没啥水平。统一日志(用来做分析)和你用的 log 封装根本没有直接关系,那主要是数据质量问题。
Mandelo
270 天前
搞清楚自己的定位,就是个干活的
xuanbg
270 天前
我司不规定日志实现,只规定日志格式,还必须是结构化的日志,不允许平铺直叙打日志
iyaozhen
270 天前
LogUtil.info ,我倒没啥意见,我们公司几千个研发,也是这么干的。当然我们是 Go ,没有 slf4j 这类事实上标准规范。但其实不关心 LogUtil 底层是咋实现的,只是打个日志,你可以在你自己的框架里面包一下(用起来还是 log.info
好处前面很多人也提过了,日志脱敏、存储的统一性。虽然有点搓,但也无伤大雅。
不过肯定有性能的要求,开发 LogUtil 的团队需要给出性能报告,以及承担相关责任(比如日志库 panic 了,平台上查不到日志了)

我倒是反对加上 code101 ,这种纯沙币的行为,完全不可控,很容易就重复了,还不如直接记录文件名+行
KIDJourney
270 天前
已经有 TCP 了,为什么大家不用 TCP 实现一切,还要在他上面发明个 HTTP ?明明什么问题都没解决
clf
270 天前
不是很好……统一的话直接在框架里下毒就行。我们就是这么干的。提供统一的 logback.xml ,然后各个实现类里自己引入 org.slf4j.Logger

反倒是有副作用?不知道怎么封装的,一般现在日志前面会有一个缩略的日志打印的类的类名。不知道他封装后是不是丢了。。。
clf
270 天前
如果不是通过框架全局做单纯用 Util 封装的话,封装后还会有几个问题:
1. IDE 的括号和变量个数是否匹配的检查不会生效了。
2. 其他第三方库并不会按照你们的规范来……
woodfizky
270 天前
统一入口没毛病,日志 code 最好有个可扩展的枚举类之类的东西去约束。

你是不知道没统一日志工具类的情况,对本来各自为战的各个开发负责的各个不同风格的项目,统一做日志整改有多困难。

统一的好处就是好管理,日志工具也可以集成类似响应时间或者特定事件的监控,哪天公司要求对某些事件做监控报警了,限期做改造,然后你发现项目张三两个李四三个,却没用到统一的日志工具,整改起来你就头疼去吧。


有些日志侵入业务是因为一开始对日志没要求,或者说一开始业务没考虑日志和监控的需求,但是不代表这需求不合理。
yor1g
270 天前
人家重点是那个 code 🤣 你解决不了那个 code 就无法说服他

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

https://ex.noerr.eu.org/t/1100354

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

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

© 2021 V2EX