现在的工作过程中,日志在项目中的角色越来越重要,环境出问题了,遇到bug了,我们都要从日志查起。所以在项目中记录日志就显得很重要。今天就跟大家简单聊聊如何在项目中引入日志。
现在市面上比较流行的日志框架有log4j,logback等,大家可能还听说过sjf4j,当然了还有apache的commons-logging,jdk的java.util.log。那么slf4j是什么呢?slf4j,Simple Logging Facade for Java,简单日志门面,只是一个接口,没有具体的实现。它不是具体的日志解决方案,它只服务于各种各样的日志系统。我们可以把各种各样的日志实现接入slf4j,在项目中只使用slf4j就可以了。今天我们就来看看如何把log4j接入slf4j中。
首先我们需要slf4j和log4j的依赖包:log4j的核心包,slf4j的接口包,以及slf4j对log4j的实现包。
log4j
log4j
1.2.17
org.slf4j
slf4j-api
1.7.12
org.slf4j
slf4j-log4j12
1.7.12
然后,我们需要再项目中创建log4j的配置文件,默认在src下,文件名为log4j.properties。配置文件示例内容如下:
### set log levels ###
log4j.rootLogger = info,stdout,file
### 输出到控制台 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
### 输出到文件 ###
log4j.appender.file = org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File = logs/log.log
log4j.appender.file.Append = true
log4j.appender.file.Threshold = DEBUG ##
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
ConsoleAppender:表示输出到控制台,DailyRollingFileAppender:表示每天生成一个日志文件。
ConversionPattern:表示日志的输出格式,其内容代表的具体含义,大家可以参考log4j的其他资料,这里就不一一讲解了。
在项目中的使用也非常简单,只要在类中定义如下的变量即可:
private static Logger logger = LoggerFactory.getLogger(UserController.class);
在使用的时候直接调用logger.info(),logger.debug().logger.error()即可使用了。
如果我们想把jdk的java.util.log和Apache的commons-logging怎么接入slf4j呢?只需要引入一下依赖:
org.slf4j
jcl-over-slf4j
1.7.12
org.slf4j
jul-to-slf4j
1.7.12
jcl-over-slf4j:把commmons-logging接入slf4j,jul-to-slf4j:把java.util.log接入slf4j。
下面呢,我们再说说logback。Logback是由log4j创始人设计的又一个开源日志组件。相比较log4j,logback不仅继承了log4j的有点,对log4j也进行了非常大的改进。那么如何在项目中使用logback呢?
首先引入相关的依赖:
org.slf4j
slf4j-api
1.7.12
ch.qos.logback
logback-core
1.1.1
ch.qos.logback
logback-classic
1.1.1
org.logback-extensions
logback-ext-spring
0.1.1
org.slf4j
jul-to-slf4j
1.7.6
org.slf4j
jcl-over-slf4j
1.7.6
org.slf4j
log4j-over-slf4j
1.7.6
在上边的要特别注意的是,我们要把log4j也接入slf4j,并且在项目中不能再引入log4j的jar包和slf4j-log4j-*的jar包,这个在打包的时候,要特别注意。
然后在src下创建logback的配置文件logback.xml:
${log.home}/default/common-default.log.%d{yyyyMMdd}
30
%d [%t] %-5p %c{2} [%X{traceRootId}/%X{userId}/%X{userEmail}/%X{userPhone}] - [%m]%n
${log.home}/error/common-error.log.%d{yyyyMMdd}
%d [%t] %-5p %c{2} [%X{traceRootId}/%X{userId}/%X{userEmail}/%X{userPhone}] - [%m]%n
ERROR
${log.home}/perf/common-perf.log.%d{yyyyMMdd}
30
%d [%t] %-5p %c{2} [%X{traceRootId}/%X{userId}/%X{userEmail}/%X{userPhone}] - [%m]%n
${log.home}/dao/common-dao.log.%d{yyyyMMdd}
1
5
%d [%t] %-5p %c{2} [%X{traceRootId}/%X{userId}/%X{userEmail}/%X{userPhone}] - [%m]%n
${log.home}/dlock/common-dlock.log.%d{yyyyMMdd}
1
5
%d [%t] %-5p %c{2} [%X{traceRootId}/%X{userId}/%X{userEmail}/%X{userPhone}] - [%m]%n
${log.home}/service/common-service.log.%d{yyyyMMdd}
30
%d [%t] %-5p %c{2} [%X{traceRootId}/%X{userId}/%X{userEmail}/%X{userPhone}] - [%m]%n
${log.home}/business/common-business.log.%d{yyyyMMdd}
30
%d [%t] %-5p %c{2} [%X{traceRootId}/%X{userId}/%X{userEmail}/%X{userPhone}] - [%m]%n
${log.home}/alarm/common-alarm.log.%d{yyyyMMdd}
30
%d [%t] %-5p %c{2} [%X{traceRootId}/%X{userId}/%X{userEmail}/%X{userPhone}] - [%m]%n
${log.home}/trace/tracing.log.%d{yyyy-MM-dd-HH}.gz
72
%d - [%m]%n
最后要在web.xml中进行配置:
logbackConfigLocation
classpath:logback.xml
ch.qos.logback.ext.spring.web.LogbackConfigListener
在使用方式上,和log4j是一样的,使用org.slf4j的两个类即可。
private static Logger logger = LoggerFactory.getLogger(UserController.class);