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

前言

最近接手了公司另一个项目,熟悉业务和代码苦不堪言。

我接手一个新项目,有个习惯,就是看结构,看数据库,搜代码。

其中搜代码是我个人这些年不知不觉形成的癖好,我下面给大家展示下这个小癖好。

正文

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

1、直接打印堆栈

比如搜索了printStackTrace(),目的是为了看这个项目中有多少地方直接打印了堆栈。

不搜还好,一搜,沃日,这滚动条,是奏响我悲痛的序章,竟然到处都是这种打印,而且是release分支。

image

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

image

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

image

2、堆栈+log

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

image

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

image

3、log+Json

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

我公司这个更酸爽,用的还是FastJson。

image

4、小插曲

写到这里,我可以告诉大家我写这篇文章的初衷不是我想教大家学习,因为这就是常识的东西。

我是因为今天的一件事感到意外。

我同组的工作了12年的Java工程师,做过非常多的项目,也确实很有经验且有责任心的同事。

他也写过这样的代码,因为我用IDEA查看了提交人,其中就有他的贡献。

另外,我有把上面log+堆栈+throw的写法给他看看,他的回答非常理所当然。

“这有问题吗,没报错啊”

我当场石化了,然后尴尬的笑笑就聊别的话题了。

讲这个小插曲的原因是什么,一叶知秋,从他身上我能断定,这样的工程师比比皆是。

干了这么多年,连个基本的日志规范都没有概念,哪怕不看什么阿里编码规范,至少对基础性的东西有个了解吧。

5、日志规范

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

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

image

再看这个,第8条,禁止直接打印堆栈。

第9条,正确的打印异常日志的规范,我本人也一直都是第9条这种方式打印的。

另外,第10条说的很清楚,为什么不要在log里面用JSON转换工具,说简单点就是可能会报错,然后导致业务不走了。

一个日志打印本来是辅助排查问题用的,结果影响了正常业务流程,你说这是不是隐患。

image

而且,还告诉你了要如何打印入参,就是用toString()方法就行。

看看,写得多好,但是有多少人真的看了,都像你买的网课一样存在那里摆烂了吧。

总结

希望大家认真看一看,虽然简单,可很多程序员就差这么点意思,还是要养成好习惯哦。

这个黄山版的阿里Java开发手册,我重新放到git了,如果没有,自己去下吧。

Git地址:https://gitee.com/fangfuji/java-share


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/72532.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3:3、项目目录和关键文件

关于vsvode的更改 <!-- 加上setup允许在script中直接编写组合式api --> <script setup> // 组件引入后直接用 import HelloWorld from ./components/HelloWorld.vue import TheWelcome from ./components/TheWelcome.vue</script><!-- 1、js放在最上面&am…

linux安装postgresql13

linux安装postgresql13 1. 安装2. 数据库初始化3.配置远程访问3.1 修改配置文件3.2 重启服务3.3 测试连接 1. 安装 linux下载链接&#xff1a;https://www.postgresql.org/download/linux/ubuntu/安装命令sudo sh -c echo "deb https://apt.postgresql.org/pub/repos/apt…

20230908_python练习_服务端与客户端数据交互

用户可以通过简单操作进行服务端数据交互&#xff0c;通过简单的sql语句直接获取EXCEL表&#xff0c;可以用来作为交互的基础。主要涉及三部分&#xff1a; 1:数据库存储表结构 --日志记录表结构 create table shzc.yytowz_service_title (leixing varchar2(18),ziduan1 v…

软件测试/测试开发丨学会与 AI 对话,高效提升学习效率

点此获取更多相关资料 简介 ChatGPT 的主要优点之一是它能够理解和响应自然语言输入。在日常生活中&#xff0c;沟通本来就是很重要的一门课程&#xff0c;沟通的过程中表达越清晰&#xff0c;给到的信息越多&#xff0c;那么沟通就越顺畅。 和 ChatGPT 沟通也是同样的道理&…

单目标应用:基于成长优化算法(Growth Optimizer,GO)的微电网优化调度MATLAB

一、微网系统运行优化模型 微电网是由分布式电源、储能装置和能量转换装置等组成的小型发配电系统&#xff0c;具有成本低、电压低、污染小等特点。由于环保和能源压力&#xff0c;清洁可再生能源和分布式能源工业发展潜力巨大。微电网控制器可实现对电网的集中控制&#xff0…

搭建RabbitMQ消息服务,整合SpringBoot实现收发消息

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;3年JAVA全栈开发经验&#xff0c;专注JAVA技术、系统定制、远程指导&#xff0c;致力于企业数字化转型&#xff0c;CSDN博客专家&#xff0c;蓝桥云课认证讲师。 目录 一、前言1.1 什么是消息队列1.2 RabbitMQ 是什么1.…

Linux:【Mysql】Centos7安装mysql8.0

目录 一、环境及版本介绍 二、安装前准备 三、开始安装 一、环境及版本介绍 Linux环境&#xff1a;Centos7 Mysql版本&#xff1a;8.0.26 安装时使用的用户&#xff1a;root 二、安装前准备 1.1、下载Centos7镜像 网上寻找相关资源即可 1.2、下载VMwareWorkstation Pro并…

【LeetCode-中等题】208. 实现 Trie (前缀树)

文章目录 题目方法一&#xff1a;利用数组构建26叉树方法二&#xff1a;利用哈希表构建26叉树 题目 方法一&#xff1a;利用数组构建26叉树 插入图示&#xff1a; 全搜索和前缀搜索&#xff1a; 注意&#xff1a;全局匹配匹配完直接返回插入时的标志位 而前缀匹配时&#xff…

OpenWrt系统开发笔记

openWrt英文官网&#xff1a; https://openwrt.org/ 中文官网&#xff1a; http://www.openwrt.org.cn/ 一、开发环境及编译 在github上有两个源码使用的比较多   一个是lede,地址为&#xff1a;https://github.com/coolsnowwolf/lede   另一个为OpenWrt的官方源码&#…

Redis 管道

1. 面试题 1.1 如何优化频繁命令往返造成的性能瓶颈? 1.2 问题由来 Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。一个请求会遵循以下步骤&#xff1a; 1 客户端向服务端发送命令分四步(发送命令→命令排队→命令执行→返回结果)&#xff0c;并监听Socket返…

Redis 复制(replica)

1. 是什么 1.1 官网地址 https://redis.io/docs/management/replication/ 1.2 一句话 1. 就是主从复制&#xff0c;master以写为主&#xff0c;slave以读为主 2. 当master数据变化的时候&#xff0c;自动将新的数据异步同步到其它slave数据库 2. 能干嘛 1. 读写分离 2. 容灾…

智能化电力运维:数字孪生的崭露头角

随着科技的不断发展&#xff0c;数字孪生技术在各个领域的应用愈发广泛&#xff0c;尤其在电力运维领域&#xff0c;它正发挥着革命性的作用。数字孪生是一种虚拟仿真技术&#xff0c;通过实时模拟真实世界的物理对象或过程&#xff0c;可以从多方面为电力运维带来改变&#xf…

PEX装机

目录 一、PXE是什么&#xff1f; 二、PXE的组件&#xff1a; vsftpd/httpd/nfs tftp dhcp 三、配置vsftpd 四、配置tftp 1.安装tftp-server 2.启动tftp 五、准备pxelinx.0文件、引导文件、内核文件 1.准备pxelinux.0文件 2.准备引导文件、内核文件 六、配置dhcp …

实时操作系统Freertos开坑学习笔记:(八):信号量、事件标志组、任务通知机制

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、信号量的简介1.信号量与队列的区别&#xff1f; 二、二值信号量及其实例1.什么是二值信号量2.二值信号量相关API函数3.二值信号量实例 三、计数型信号量四、…

TD3算法

TD3算法 全称Twin Delayed DDPG&#xff0c;是对DDPG算法的继承、发展和改进&#xff0c;论文 改进如下&#xff1a; T w i n \mathcal{T}win Twin&#xff1a;使用了两个critic来评估actor的动作价值&#xff0c;对应两个critic target&#xff0c;一个actor target&#xff0…

ChatGPT 超有用提示词 练习雅思口语

目录 Prompts &#x1f53b;作为一个英语口语老师和提高英语口语 方法1&#xff1a;口语简单练习 方法2&#xff1a;角色扮演练习口语 作为一个英语翻译/英语作文优化师/稿件校对 作为一个”职位”面试官 学习英文单词 演员 苏菲 玛索 阿尔弗雷多詹姆斯帕西诺 要孝顺…

联合教育部高等学校科学研究发展中心,阿依瓦科技创新教育专项正式发布!

7 月 24 日&#xff0c;教育部科技发展中心官网发布了《中国高校产学研创新基金&#xff0d;阿依瓦科技创新教育专项申请指南》。 针对高校在人工智能、智能制造、智慧校园、大数据等领域科研和教研的创新研究&#xff0c;教育部高等学校科学研究发展中心与阿依瓦(北京)技术有…

Android 自定义View之圆形进度条

很多场景下都用到这种进度条&#xff0c;有的还带动画效果&#xff0c; 今天我也来写一个。 写之前先拆解下它的组成&#xff1a; 底层圆形上层弧形中间文字 那我们要做的就是&#xff1a; 绘制底层圆形&#xff1b;在同位置绘制上层弧形&#xff0c;但颜色不同&#xff…

2651. 计算列车到站时间

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;数学 知识回忆除法运算 写在最后 Tag 【数学】 题目来源 2651. 计算列车到站时间 题目解读 给你一个列车预计到达时间点和一个列车延误的时间&#xff0c;请返回列车实际的到达时间。 解题思路 方法一&#xff1a;数…

C语言每日一练--Day(16)

本专栏为c语言练习专栏&#xff0c;适合刚刚学完c语言的初学者。本专栏每天会不定时更新&#xff0c;通过每天练习&#xff0c;进一步对c语言的重难点知识进行更深入的学习。 今日练习题关键字&#xff1a;寻找奇数 峰值 二分查找 &#x1f493;博主csdn个人主页&#xff1a;小…