业务知识——Logger日志打印规范
初期,我们的系统比较简单,在这个过程中,加上大家平时都不注意,所以Logger日志一直是打印的随心所欲,什么是随心所欲的,就是大家想在哪里打日志就在哪里打印日志,想输出什么就输出什么,毫无规范可言,在系统的流量和业务量变得越来越复杂的情况下,良好的日志才能帮助我们更快地找到问题,更好地解决问题。
首先来看一下比较常用的Logger日志级别(部分未列出):
- error - 运行期错误日志记录,应该有专门的error日志文件。;
- warn - 警告信息,如程序调用了一个即将作废的接口,接口的不当使用,运行状态不是期望的但仍可继续处理等;
- info - 有必要的事件信息记录。
- debug - 调试信息,业务处理进行状态,当前的变量值等;
- trace - 一些更详细的跟踪信息;
鉴于我们是一个金融系统,流量还是不算很大,我个人认为debug级别和info级别可以统一归为info级别下打印,这是考虑到现在系统稳定性不够,处于一个快速迭代开发的过程中,线上问题可能随时都有,所以将业务流转与部分变量值打印出来还是很有必要的。error记录错误日志,但如果错误是预期会发生的,并且已经有了其他的处理流程,则建议使用warn级别。例如在try-catch中catch块里处理后继续流程的日志记录。
1.Logger对象的定义:
<strong>private static final Logger logger = LoggerFactory.getLogger(Test.class);</strong>
2.日志中不出现计算或方法调用,防止在打印日志的时候报错。
之前在上家公司的时候就确实出现过因打印日志而系统RunTimeException的,不应该出现。
3.try-catch如果往外抛出,则不应该打印异常信息。
try {throw new Exception();
} catch (Exception e) {logger.error("xxxxxx", e);throw e;
}
这样的处理解释不合适的,因为抛出去的异常,一般情况下你肯定会记录。(当然如果你不记录,那么我就搞不懂为什么你要抛出去了)。
4.如何打印error Log
log.error("xxxxxxxxxxxx", e);
这种比较推荐,当然在实际过程中我也看到有同事用了其他的方式,形如:
logger.error("xxxxxx", e.getStackTrace());
可以是可以,这种打印出来的stackTrace比较丑。。。用一下你就知道。
Log4j、Log4j2的源码中对于异常Exception的处理时这样的。
所以【占位符小于实际的参数数量时会把最后一个设置为Throwable】,即可以正常打印error。
log.error("xxxxxxxxxxxx{}","第一个参数" e); //可以正常打印
log.error("xxxxxxxxxxxx{},{}","第一个参数" e); //不能正常打印,因为占位符和参数数量一样
private void initThrowable(final Object[] params, final int argCount, final int usedParams) {if (usedParams < argCount && params[argCount - 1] instanceof Throwable) {this.throwable = (Throwable) params[argCount - 1];} else {this.throwable = null;}}
5.日志记录建议用英文(这点没有依据)。
用中文除了占用大点好像没什么不好,但是还是建议用字母。
6.http请求时应该打印 url ,param, get/post,statusCode,ret,timeUsed等关键字段。
反正我吃过没打印这些的亏,还不是我写的代码。说出来都是泪。
7.相对6,别人调用接口的时候应打印 入参,请求用时,返回值,来源等关键字段。
8.分支流程如果必要再外层打印参数,可以知道具体走了哪个流程。
以上都是日常工作的痛点,希望自己可以在今后工作中也以此为标准。
业务知识——Logger日志打印规范相关推荐
- java占位符打印_java简单日志打印规范小记
个人认为,如果公司一些基础类库不做约束,很可能"埋坑",形成技术债务,最终为此付出代价.本文讲解一个最基本的日志打印规范. 1. 日志打印组件 日志组件有很多,日志门面的选择有:S ...
- java程序日志打印规范
java日志打印规范 一.日志 API 二.日志输出 三.日志配置 V1.0.0_NEW 四.日志性能 五.栈信息打印 一.日志 API 1.[强制]各应用中不可直接使用日志系统(Log4j.Logb ...
- java 日志打印规范
日志要求: 重要日志一定要打印到日志文件 日志文件应该每天滚动一次,日志多的可以每个小时滚动一次 日期必须精确到毫秒,而不是秒 确保日志是按事件顺序输出 [推荐]最好能打印调用方信息,比如访问者ip等 ...
- logback不同业务的日志打印到不同文件
logback不同业务的日志打印到不同文件 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/mggwct/article/details/777181 ...
- maven日志打印,解决logger.info打印内容无法显示
环境: maven win10 问题描述 引入依赖slf4j-nop之后,logger.info()打印内容无法显示,查找资料发现slf4j只是打印日志的接口,没有实现,于是使用log4j 依赖 &l ...
- 前端小知识:控制台打印(console)- 模拟Java日志打印、表格形式打印美化输出对象、代码运行时间统计
文章目录 6. 控制台打印(Console) 模拟Java日志打印格式 美化对象打印(表格形式打印输出) 日志等级输出(让其在控制台显示时有颜色提示) 代码运行时间统计打印输出 6. 控制台打印( ...
- 项目日志记录规范和标准
<项目日志记录规范和标准>(第二版2017年10月) 第一版(2013年3月)参见这里. 一.说明 日志分类如下: 1. 面向问题排查的日志 2. 面向提醒或告警的日志 3. 面向调试和测 ...
- 【java】java自带的java.util.logging.Logger日志功能
偶然翻阅到一篇文章,注意到Java自带的Logger日志功能,特地来细细的看一看,记录一下. 1.Java自带的日志功能,默认的配置 ①Logger的默认配置,位置在JRE安装目录下lib中的logg ...
- 控制台打印_SpringBoot2.0 基础案例(02):配置Log4j2,实现不同环境日志打印
一.Log4j2日志简介 日志打印是了解Web项目运行的最直接方式,所以在项目开发中是需要首先搭建好的环境. 1.Log4j2特点 1)核心特点 相比与其他的日志系统,log4j2丢数据这种情况少:d ...
最新文章
- Java控件模糊半透明_Android如何实现模糊的半透明窗口 | 学步园
- WPF设置ListBoxItem失去焦点时的背景色
- (转)WebSphere的web工程中怎么获取数据源
- linux后台运行python程序 nohup不挂断
- Centos之LAMP环境搭建
- 宽带ADSL安装过程的18个问答
- 逆向libbaiduprotect(二)
- ubuntu生成pem证书连接服务器(已验证)
- 全球与中国高精度漆包扁铜线市场深度研究分析报告
- 解决织梦CMS后台验证码不正确的四种方法
- 《东周列国志》第一百一回 秦王灭周迁九鼎 廉颇败燕杀二将
- c语言画实心圆角矩形,android 画虚线、实线,画圆角矩形,一半圆角
- 非洲做项目的务实与务虚
- ICP备案不等于ICP许可证
- Go语言获取当前系统信息
- 哪款蓝牙耳机品质好?音质好的四款蓝牙耳机测评
- antlr + python
- 国标28181:什么是RTP协议与RTCP协议
- net core3.1 版本 解决错误 ConfigurationBuilder”未包含“SetBasePath”的定义
- 2022年山东省职业院校技能大赛高职组“信息安全管理与评估”赛项竞赛规程