前言
最近遇到日志打印异常的问题,设置好的日志输出级别不生效,在本地直接在代码里写个Main函数测试没问题,上Linux出现日志输出等级不生效,我设置的error等级,却把info日志给输出了。项目使用logback日志输出框架,最后发现原来是日志冲突,项目包含log4j+slf4j的日志框架,故需要将相关jar包排除即可。 提示:以下是本篇文章正文内容引用
https://www.cnblogs.com/FlyAway2013/p/10691936.html
https://zhuanlan.zhihu.com/p/101104008
https://www.jianshu.com/u/52c6d746bd8e
http://www.slf4j.org/manual.html (slf4j官网)
一、日志的作用
日志文件用来记录系统操作事件,主要用来快速定位问题的根源、追踪程序执行的过程、追踪数据的变化、采集运行环境数据。日志主要分为事件日志和消息日志。
程序上线后,一旦发生异常,首先要弄清楚当时发生了什么错误。进行了什么操作,环境是否受影响,数据产生生命变化,是不是可重复发生等,然后再进一步的确定大致是哪个方面的问题。确定是程序的问题后再去重现、研究、提出解决方案。这时,日志就给我们提供了第一手的资料。
日志内容需包含哪些:打印日志的时间戳、日志是哪个类记录的、日志事件的简要说明、事件生产者唯一标识、日志输出级别。
二、日志框架
为了兼容系统中或者依赖的jar包中其他日志框架,最好的方法是使用桥接将其他日志框架桥接到slf4j上,然后使用具体的日志输出框架。如:log4j桥接到slf4j,然后使用logback日志框架输出日志。
1. 直接使用各日志系统
1.1 log4j
maven依赖:
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
配置文件:log4j.properties
代码中使用:
private static final org.apache.log4j.Logger logger = org.apache.log4j.LogManager.getLogger(loggerName.class);
1.2 commons-logging ,jcl
maven依赖:
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
配置文件:commons-logging.properties
代码中使用:
private static final org.apache.commons.logging.Log LOG = org.apache.commons.logging.LogFactory.getLog(loggerName.class);
1.3 log4j2
maven依赖:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.11.2</version>
</dependency>
配置文件: log4j2.xml 或 log4j.xml
代码中使用:
private static final org.apache.logging.log4j.Log