前言

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

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

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

正文

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

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地址:https://gitee.com/fangfuji/java-share


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

请大家一定不要像我们公司这样打印log日志的更多相关文章

  1. 5-MIGO收货-请维护容差码VP(公司代码1000)的容差限制-消息号 M8215

    请维护容差码VP(公司代码1000)的容差限制 消息号 M8215 诊断 系统试图检查输入输入是否在特定的限度范围之内.由于尚未维护显示的容差码限制,所以无法进行此操作. 步骤 系统管理员必须在公司代 ...

  2. 【niubi-job——一个分布式的任务调度框架】----如何开发一个niubi-job的定时任务

    引言 上篇文章LZ主要讲解了niubi-job如何安装,如果看过上一篇文章的话,大家应该知道,niubi-job执行的任务是需要用户自己上传jar包的. 那么问题来了,这个jar包如何产生?有没有要求 ...

  3. VS code开发工具的使用教程

    前言 工欲善其事必先利其器,提高程序员的开发效率必须要有一个好的开发工具,当前最好的前端开发工具主要有VS code.sublime Text.Atom.Webstorm.Notepad++. VS ...

  4. Mobilize.Net Silverlight bridge to Windows 10 UWP

    Windows UWP 既 Windows 10 Universal Windows platform,这个微软基于Windows NT内核的个运行时(Runtime)平台,此平台横跨所有的 Wind ...

  5. 接口测试入门(5)----新框架重构,使用轻量级的HTTP开发库 Unirest

    之前的第一套框架在使用过程中发现存在以下问题: 一.  框架1缺点: 1.登陆的账号每个人写的不一样,一旦用户在测试环境被修改,则导致用例失败 2.每次读取访问网址,需要在同一个java文件下切换测试 ...

  6. vConsole--针对手机网页的前端 console 调试面板。

    一个针对手机网页的前端 console 调试面板. 简介 vConsole 是一个网页前端调试面板,专为手机 web 页面量身设计,帮助开发者更为便捷地进行开发调试工作. 手机预览 http://we ...

  7. 小程序API

    基础: wx.canIUse(string)    boolean wx.canIUse(string schema)   判断小程序的API,回调,参数,组件等是否在当前版本可用. 参数说明 ${A ...

  8. SLG手游Java服务器的设计与开发——网络通信

    文章版权归腾讯GAD所有,禁止匿名转载:禁止商业使用:禁止个人使用. 一.前言 上文分析了我们这款SLG的架构,本章着重讲解我们的网络通信架构,由上文的功能分析我们可以得知,游戏的所有功能基本上属于非 ...

  9. 深入Activity

    此刻,你应该静下心来,在阅读中思考.在思考中进步,读完本篇文章的你一定会有不一样的收获,请让我们共同进步! 核心内容 1.Activity数据交换 2.Activity中的任务栈 3.Activity ...

  10. Kafka学习(一)

    官网 kafka.apache.org 集群部署 消息中间键 --> 分布式流式平台 Kafka Streaming Flume: 1个进程包含三个角色 source channle sink ...

随机推荐

  1. docker 部署 springboot项目和直接运行 jar 文件详细步骤

    目前docker发布springboot有两种方式,一种是制作镜像,另一种是直接运行jar 文件 第一种使用镜像来部署 一.创建项目目录 [root@dex ~]# mkdir /opt/backst ...

  2. Pandas 加载数据的方法和技巧

    哈喽大家好,我是咸鱼 相信小伙伴们在学习 python 数据分析的过程中或多或少都会听说或者使用过 pandas pandas 是 python 的一个拓展库,常用于数据分析 今天咸鱼将介绍几个关于 ...

  3. Rust 语言风靡学术界

    AWS 将 Rust 编译器团队负责人收入麾下的新闻让开发者们再次聚焦于这门兼具安全性与高性能的编程语言.近日,著名科学期刊 Nature 刊登了一篇文章,表明 Rust 语言也正在成为学术界最受欢迎 ...

  4. 基于 Linux 集群环境上 GPFS 的问题诊断

    作者:谷珊,帅炜,陈志阳来源:IBM Developer GPFS 的概述 GPFS 是 IBM 公司提供的一个共享文件系统,它允许所有的集群节点可以并行访问整个文件系统.GPFS 允许客户共享文件, ...

  5. 关于int**在malloc为二维数组分配空间时候的作用见解

    关于int**在用malloc函数为二维数组分配空间时候 int**   二级指针类型 二维数组的数组名为行指针,写成  arr  =(char**)malloc(n*sizeof(char))时,a ...

  6. WPF 入门笔记 - 03 - 样式基础

    程序的本质 - 数据结构 + 算法 本篇为学习李应保老师所著的<WPF专业编程指南>并搭配WPF开发圣经<WPF编程宝典第4版>以及痕迹大佬<WPF入门基础教程系列> ...

  7. 【Rust-book】第五章 使用结构体来组织相关联的数据

    第五章 使用结构体来组织相关联的数据 结构,或者结构体,是一种自定义数据类型,它允许我们命名多个相关的值并将它们组成一个有机的结合体. 可以把结构体视作对象中的数据属性 1 对比元组和结构体之间的异同 ...

  8. 用CSS实现带动画效果的单选框

    预览一下效果:http://39.105.101.122/myhtml/CSS/singlebox2/singleRadio.html 布局结构为: 1 <div class="rad ...

  9. Transformer编码器和解码器被广泛应用于自然语言处理、计算机视觉、语音识别等领域。下面是一些Trans

    目录 1. 引言 2. 技术原理及概念 2.1 基本概念解释 2.1.1 编码器 2.1.2 解码器 2.2 技术原理介绍 2.2.1 编码器 2.2.2 解码器 2.3 相关技术比较 3. 实现步骤 ...

  10. 关于SQL SERVER 字段类型char(n) , nchar(n) , varchar(n) , nvarchar(n)

    对于很多新手来说,经常被字段类型搞得晕头转向,今天我用通俗易懂的解释帮大家理解这些类型. 在数据库字段类型定义中,可以分为两大类,一类为Unicode类型,另一种就是非Unicode. Unicode ...