| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 日志打印的15个好建议 -> 正文阅读 |
|
[Java知识库]日志打印的15个好建议 |
前言大家好,我是捡田螺的小男孩(公众号)。日志是快速定位问题的好帮手,是撕逼和甩锅的利器!打印好日志非常重要。今天我们来聊聊日志打印的15个好建议~ 1. 选择恰当的日志级别常见的日志级别有5种,分别是error、warn、info、debug、trace。日常开发中,我们需要选择恰当的日志级别,不要反手就是打印info哈~
2. 日志要打印出方法的入参、出参我们并不需要打印很多很多日志,只需要打印可以快速定位问题的有效日志。有效的日志,是甩锅的利器! 哪些算得的上有效关键的日志呢?比如说,方法进来的时候,打印入参。再然后呢,在方法返回的时候,就是打印出参,返回值。入参的话,一般就是userId或者bizSeq这些关键信息。正例如下:
3. 选择合适的日志格式理想的日志格式,应当包括这些最基本的信息:如当前时间戳(一般毫秒精确度)、日志级别,线程名字等等。在logback日志里可以这么配置:
如果我们的日志格式,连当前时间都沒有记录,那连请求的时间点都不知道了? 4. 遇到if...else...等条件时,每个分支首行都尽量打印日志当你碰到if...else...或者switch这样的条件时,可以在分支的首行就打印日志,这样排查问题时,就可以通过日志,确定进入了哪个分支,代码逻辑更清晰,也更方便排查问题了。 正例:
5.日志级别比较低时,进行日志开关判断对于trace/debug这些比较低的日志级别,必须进行日志级别的开关判断。 正例:
因为当前有如下的日志代码:
如果配置的日志级别是warn的话,上述日志不会打印,但是会执行字符串拼接操作,如果 6. 不能直接使用日志系统(Log4j、Logback)中的 API,而是使用日志框架SLF4J中的API。SLF4J 是门面模式的日志框架,有利于维护和各个类的日志处理方式统一,并且可以在保证不修改代码的情况下,很方便的实现底层日志框架的更换。 正例:
7. 建议使用参数占位{},而不是用+拼接。反例:
上面的例子中,使用 正例如下:
我们使用了大括号 8. 建议使用异步的方式来输出日志。
9. 不要使用e.printStackTrace()反例:
正例:
理由:
10. 异常日志不要只打一半,要输出全部错误信息反例1:
反例2:
正例:
11. 禁止在线上环境开启 debug禁止在线上环境开启debug,这一点非常重要。 因为一般系统的debug日志会很多,并且各种框架中也大量使用 debug的日志,线上开启debug不久可能会打满磁盘,影响业务系统的正常运行。 12.不要记录了异常,又抛出异常反例如下:
13.避免重复打印日志避免重复打印日志,酱紫会浪费磁盘空间。如果你已经有一行日志清楚表达了意思,避免再冗余打印,反例如下:
如果你是使用log4j日志框架,务必在 正例:
14.日志文件分离
15. 核心功能模块,建议打印较完整的日志
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 | -2025/1/31 10:54:44- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |