初期,我们的系统比较简单,在这个过程中,加上大家平时都不注意,所以Logger日志一直是打印的随心所欲,什么是随心所欲的,就是大家想在哪里打日志就在哪里打印日志,想输出什么就输出什么,毫无规范可言,在系统的流量和业务量变得越来越复杂的情况下,良好的日志才能帮助我们更快地找到问题,更好地解决问题。

首先来看一下比较常用的Logger日志级别(部分未列出):

  1. error - 运行期错误日志记录,应该有专门的error日志文件。;
  2. warn - 警告信息,如程序调用了一个即将作废的接口,接口的不当使用,运行状态不是期望的但仍可继续处理等;
  3. info - 有必要的事件信息记录。
  4. debug - 调试信息,业务处理进行状态,当前的变量值等;
  5. 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日志打印规范相关推荐

  1. java占位符打印_java简单日志打印规范小记

    个人认为,如果公司一些基础类库不做约束,很可能"埋坑",形成技术债务,最终为此付出代价.本文讲解一个最基本的日志打印规范. 1. 日志打印组件 日志组件有很多,日志门面的选择有:S ...

  2. java程序日志打印规范

    java日志打印规范 一.日志 API 二.日志输出 三.日志配置 V1.0.0_NEW 四.日志性能 五.栈信息打印 一.日志 API 1.[强制]各应用中不可直接使用日志系统(Log4j.Logb ...

  3. java 日志打印规范

    日志要求: 重要日志一定要打印到日志文件 日志文件应该每天滚动一次,日志多的可以每个小时滚动一次 日期必须精确到毫秒,而不是秒 确保日志是按事件顺序输出 [推荐]最好能打印调用方信息,比如访问者ip等 ...

  4. logback不同业务的日志打印到不同文件

    logback不同业务的日志打印到不同文件 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/mggwct/article/details/777181 ...

  5. maven日志打印,解决logger.info打印内容无法显示

    环境: maven win10 问题描述 引入依赖slf4j-nop之后,logger.info()打印内容无法显示,查找资料发现slf4j只是打印日志的接口,没有实现,于是使用log4j 依赖 &l ...

  6. 前端小知识:控制台打印(console)- 模拟Java日志打印、表格形式打印美化输出对象、代码运行时间统计

    文章目录 6. 控制台打印(Console) 模拟Java日志打印格式 美化对象打印(表格形式打印输出) 日志等级输出(让其在控制台显示时有颜色提示) 代码运行时间统计打印输出   6. 控制台打印( ...

  7. 项目日志记录规范和标准

    <项目日志记录规范和标准>(第二版2017年10月) 第一版(2013年3月)参见这里. 一.说明 日志分类如下: 1. 面向问题排查的日志 2. 面向提醒或告警的日志 3. 面向调试和测 ...

  8. 【java】java自带的java.util.logging.Logger日志功能

    偶然翻阅到一篇文章,注意到Java自带的Logger日志功能,特地来细细的看一看,记录一下. 1.Java自带的日志功能,默认的配置 ①Logger的默认配置,位置在JRE安装目录下lib中的logg ...

  9. 控制台打印_SpringBoot2.0 基础案例(02):配置Log4j2,实现不同环境日志打印

    一.Log4j2日志简介 日志打印是了解Web项目运行的最直接方式,所以在项目开发中是需要首先搭建好的环境. 1.Log4j2特点 1)核心特点 相比与其他的日志系统,log4j2丢数据这种情况少:d ...

最新文章

  1. Java控件模糊半透明_Android如何实现模糊的半透明窗口 | 学步园
  2. WPF设置ListBoxItem失去焦点时的背景色
  3. (转)WebSphere的web工程中怎么获取数据源
  4. linux后台运行python程序 nohup不挂断
  5. Centos之LAMP环境搭建
  6. 宽带ADSL安装过程的18个问答
  7. 逆向libbaiduprotect(二)
  8. ubuntu生成pem证书连接服务器(已验证)
  9. 全球与中国高精度漆包扁铜线市场深度研究分析报告
  10. 解决织梦CMS后台验证码不正确的四种方法
  11. 《东周列国志》第一百一回 秦王灭周迁九鼎 廉颇败燕杀二将
  12. c语言画实心圆角矩形,android 画虚线、实线,画圆角矩形,一半圆角
  13. 非洲做项目的务实与务虚
  14. ICP备案不等于ICP许可证
  15. Go语言获取当前系统信息
  16. 哪款蓝牙耳机品质好?音质好的四款蓝牙耳机测评
  17. antlr + python
  18. 国标28181:什么是RTP协议与RTCP协议
  19. net core3.1 版本 解决错误 ConfigurationBuilder”未包含“SetBasePath”的定义
  20. 2022年山东省职业院校技能大赛高职组“信息安全管理与评估”赛项竞赛规程

热门文章

  1. nginx看最大并发量_Nginx高并发配置思路(轻松应对1万并发量)
  2. 关于浏览器跨域请求的相关原理实现--很经典的博客
  3. 飞桨第六课 2020.4.5
  4. Python SQLAlchemy入门教程
  5. Git/码云上多人协作,创建分支,上传修改
  6. Python-类的学习
  7. 深度学习---英文名称简写大全
  8. 650服务器raid配置_DELL R730服务器配置RAID及安装服务器系统
  9. lombok中的@Data注解与MyBatis的懒加载机制冲突解决
  10. Spring的事务控制-基于注解的方式