请大家一定不要像我们公司这样打印log日志

前言

最近接手了公司另一个项目,熟悉业务和代码苦不堪言。
我接手一个新项目,有个习惯,就是看结构,看数据库,搜代码。
其中搜代码是我个人这些年不知不觉形成的癖好,我下面给大家展示下这个小癖好。

正文

我面对一个到手的新项目,会主动去搜索一些关键词,让我对这个项目有个整体健康的认识。

1、直接打印堆栈

比如搜索了printStackTrace(),目的是为了看这个项目中有多少地方直接打印了堆栈。
不搜还好,一搜,沃日,这滚动条,是奏响我悲痛的序章,竟然到处都是这种打印,而且是release分支。

我抽点了一些,看看具体是怎么写的,比如下面这样。

再比如下面这样,我反正长见识了,也可能只是我不会。

2、堆栈+log

比较典型的可能是下面这样,我以前就见过不少次,堆栈和log混合双打。

还无意间发现了这样的打印方式,log、堆栈、throw,纵享丝滑,一气呵成,让我们一起摇摆,哎,一起摇摆哎~

3、log+Json

最后这种,我怀疑是正在看文章的很多人就干过的,入参打印JSON,舒爽的做法,极致的坑爹。
我公司这个更酸爽,用的还是FastJson。

4、小插曲

写到这里,我可以告诉大家我写这篇文章的初衷不是我想教大家学习,因为这就是常识的东西。
我是因为今天的一件事感到意外。
我同组的工作了12年的Java工程师,做过非常多的项目,也确实很有经验且有责任心的同事。
他也写过这样的代码,因为我用IDEA查看了提交人,其中就有他的贡献。
另外,我有把上面log+堆栈+throw的写法给他看看,他的回答非常理所当然。
"这有问题吗,没报错啊"
我当场石化了,然后尴尬的笑笑就聊别的话题了。
讲这个小插曲的原因是什么,一叶知秋,从他身上我能断定,这样的工程师比比皆是。
干了这么多年,连个基本的日志规范都没有概念,哪怕不看什么阿里编码规范,至少对基础性的东西有个了解吧。

5、日志规范

所以,我专程又把以前分享过给大家的阿里巴巴《Java开发手册(黄山版)》掏出来,找出了里面日志规范着重说明的这部分。

正确的打印日志方式如下:

再看这个,第8条,禁止直接打印堆栈。
第9条,正确的打印异常日志的规范,我本人也一直都是第9条这种方式打印的。
另外,第10条说的很清楚,为什么不要在log里面用JSON转换工具,说简单点就是可能会报错,然后导致业务不走了。
一个日志打印本来是辅助排查问题用的,结果影响了正常业务流程,你说这是不是隐患。

而且,还告诉你了要如何打印入参,就是用toString()方法就行。
看看,写得多好,但是有多少人真的看了,都像你买的网课一样存在那里摆烂了吧。

总结

希望大家认真看一看,虽然简单,可很多程序员就差这么点意思,还是要养成好习惯哦。
这个黄山版的阿里Java开发手册,我重新放到git了,如果没有,自己去下吧。
Git地址:gitee.com/fangfuji/ja...
公众号 --> 【Java分享客栈】


喜欢请点赞关注↑↑↑,持续分享干货哦!

相关推荐
F-2H1 小时前
C语言:指针4(常量指针和指针常量及动态内存分配)
java·linux·c语言·开发语言·前端·c++
苹果酱05671 小时前
「Mysql优化大师一」mysql服务性能剖析工具
java·vue.js·spring boot·mysql·课程设计
_oP_i2 小时前
Pinpoint 是一个开源的分布式追踪系统
java·分布式·开源
mmsx2 小时前
android sqlite 数据库简单封装示例(java)
android·java·数据库
武子康2 小时前
大数据-258 离线数仓 - Griffin架构 配置安装 Livy 架构设计 解压配置 Hadoop Hive
java·大数据·数据仓库·hive·hadoop·架构
豪宇刘3 小时前
MyBatis的面试题以及详细解答二
java·servlet·tomcat
秋恬意4 小时前
Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别
java·数据库·mybatis
刘大辉在路上4 小时前
突发!!!GitLab停止为中国大陆、港澳地区提供服务,60天内需迁移账号否则将被删除
git·后端·gitlab·版本管理·源代码管理
FF在路上4 小时前
Knife4j调试实体类传参扁平化模式修改:default-flat-param-object: true
java·开发语言
真的很上进4 小时前
如何借助 Babel+TS+ESLint 构建现代 JS 工程环境?
java·前端·javascript·css·react.js·vue·html