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

3 天前
 WillingXyz

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

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

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

ps:此人是我 leader 的 leader 。

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

12506 次点击
所在节点    程序员
145 条回复
sxms77777
2 天前
1. 以后换了日志框架,业务层不会有任何修改
2. 单元测试方便 mock
3. 模糊业务对细节的了解,防止他们使用一些不科学的 api
sxms77777
2 天前
@sxms77777 再补充下,如何需要一些对日志框架做拓展,也无需改到业务
jackwang123
2 天前
感觉收益不大,完全不需要这样做,大面积推广一个东西,必须有充分的理由和解决实际问题为目的。
cccvno1
2 天前
打工混日子你和 leader 较什么真呢,他最起码知道 logutil 不会出大问题,技术选型肯定选自己熟悉的。
bk201
2 天前
@sxms77777 你说的这些现在的日志框架不能实现吗? slf4j 换日志框架那么方便。而且日志框架就打印字符串,有啥复杂的 api 我是没太理解
kinkin666
2 天前
统一成一个不用动脑的样子不好吗,不然

private static final java.util.Logger LOGGER
public final static slf.Logger logger
private logback.Logger loger
private log4j.logger log

更爽吗?虽然最后都是 logback
dxddd
2 天前
绝对有好处啊。结合调用链,有利于跨平台日志收集、分析、追踪,不过前提是,你公司的得有这些基础设施。
fpure
2 天前
不过说实话,我还挺喜欢 LogUtil 这种静态工具类打印日志的用法,不需要在类里面专门声明一个变量,免得老是没用上然后报 unused warning
ChefIsAwesome
2 天前
多干点活,不然天天没事,把你们裁了。这叫供给端改革,不用管消费端需不需要。
CloveAndCurrant
2 天前
不但毫无意义,反而会增加定位难度,日志自动携带的代码,类等信息已经方便定位了,加"codexxx"这种需要人为手动填写,全靠人为约束的东西,只会增加日志定位的复杂度。
COW
2 天前
那你就封装 slf4j ,把 code 码注入进去要求必传参数就好了呗,反正 slf4j 就是抽象出来的,你上面多抽象一层。
lucasdev
2 天前
@bk201 #65 这个帖子挂在"程序员"节点下,而不是"Java"节点下,感觉很多回复是对 Java 生态不太了解。看了你的几条回复,我和你的观点是比较一致的😁
meeop
2 天前
挺好的,但是如果你是业务团队,要提要求:
1 兼容目前 slf4g 所有 api ,业务侧无改动成本
2 如果因为 logUtil 导致的 bug 和故障,要架构师负责
git00ll
2 天前
哈哈习惯就好。jsonutil ,datautil ,redisutil ,cacheutil ,stringutil ,lockutil 还少吗
lyxxxh2
2 天前
你用其他方法打印日志,不就是找喷。
lyxxxh2
2 天前
扩展也可以理解。
后面可能考虑,丢 es 其他产品的日志呢,或者更加自定义的操作。
lucasdev
2 天前
楼主可以问问 AI ,我把问题直接丢给了 gemini 2.0, claude 3.5 sonnet, gpt-4o ,似乎都更推荐 SLF4J + Logback

ZeroDu
2 天前
很多人可能不了解 java 生态下的 SLF4J ,什么动态日志级别,源码级别的日志过滤,这些都是自带的。相比其他语言来说真的是很完善了。
zhady009
2 天前
@git00ll 完全不能理解这种行为,库都提供好了非得自己再包一层然后弄成 static ,然后 util 对外暴露的 api 还更少了想用的时候又自己加一个方法。
ldyisbest
2 天前
职业生涯最重要的一课是,你需要认识到,你工作的目的不在于使得公司的客户满意,而在于使得那些控制你的加薪、奖金和晋升的人满意。

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

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

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

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

© 2021 V2EX