背景
从毕业到当初加入工作曾经有两年了,在这两年期间,经验的几个大我的项目和一些小我的项目,每个我的项目都波及到日志这个模块。存在的意义无非就是两个:
- 记录业务日志,不便前期排查问题
- 以日志上的模式记录业务数据,并将日志文件推送第三方
每次接手一个新我的项目,就会先问有没有配置日志,如果没有配置日志模块,那么排查问题就是一个很恼火的问题,不分明申请参数是什么,走了哪个判断,调用第三方接口的参数和返回后果是什么,所有的问题都须要一步一步的调试且耗时耗力。自从意识到这个问题后,每次写代码都会退出日志,并将申请参数,返回后果,耗时的数据写入日志,不便前期排查问题。
目前接触比拟多Java 开源框架是SpringBoot,默认的日志实现是LogBack,通过配置xml文件就能够输入日志。之前在配置LogBack时,总是无脑的将其余我的项目的配置复制过去,也不懂为什么要这样配置。通过这几天的学习,把本人对logback的日志记录如下。
基础知识
日志级别
日志输入级别从大高到低为:
- OFF
- FATAL
- ERROR
- WARN
- INFO
- DEBUG
- TRACE
- ALL
日常开发中罕用的是:
- ERROR:用于输入影响零碎失常运行的信息
- WARN:用于输入错误信息,但不影响零碎失常运行
- INFO:用于记录失常业务日志信息,不便前期的问题排查
- DEBUG:用于开发环境下的信息输入
办法打印
举荐应用Slf4j
记录日志,在LogBack不被容许的状况下能够不便的切换到其余日志零碎。实例化logger对象:
import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class XXX { public static final Logger log = LoggerFactory.getLogger(XXX.class);}
如果应用了lombok
,则能够应用@Slf4j
注解实例化logger对象
- 输入ERROR日志
log.error("this is error log;time:{}", System.currentTimeMillis());
- 输入WARN日志
log.warn("this is warn log;time:{}", System.currentTimeMillis());
- 输入INFO日志
log.info("this is info log;time:{}", System.currentTimeMillis());
- 输入DEBUG日志
if (log.isDebugEnabled()) { log.debug("this is debug log;time:{}", System.currentTimeMillis()); }
在开发中,应用参数化日志而不是字符串拼接,能够调高代码可读性并进步性能,在记录debug日志时,先判断目前所处环境是否反对debug输入,因为 String 字符串的拼接会应用 StringBuilder 的 append()形式,有肯定的性能损耗。应用占位符仅 是替换动作,能够无效晋升性能。(摘自:阿里巴巴Java开发手册嵩山版)
日志规约
[Java开发手册(泰山版)]
Java开发手册(泰山版)
原文地址:https://www.haicheng.website/...