一、为什么是slf4j
slf4j本身并不是一个具体的日志实现框架。它所提供的是一些api及一个日志工厂。通俗一点来说的话,开发者可以在代码中使用slf4的api,其具体调用的哪一种日志框架,交给slf4j去控制就行了。作为开发者,只需配置相应的配置文件,而不会在具体的代码中留下任何日志实现类的痕迹。
二、为什么是logback
提到日志框架,最出名的可能是Apache的log4j,后来新出的log4j2虽说名字相似,其实并不是log4j的二代版本。logback与log4j的作者是同一人,据说其写logback这个日志项目就是对log4j不太满意,他要开发一个新的日志项目,也就是logback。
三、如何在web项目中使用slf4j+logback记录日志
1.slf4j相关的jar包(当然,现在一般都是使用maven或者gradle去构建)
2.logback相关的jar包
3.在项目中引入jar包后,logback会自动去在src目录中寻找名为logback-test.xml 或 logback.xml的配置文件,若没有找到,则使用用户自定义的配置地址。(一下附上logback.xml的模板)
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!-- 定义日志文件输出位置 -->
<property name="logDir" value="${catalina.home}" />
<!-- 日志最多保存几天 -->
<property name="maxHistory" value="7" />
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>
%d - %msg%n
</pattern>
</layout>
</appender>
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<encoder>
<pattern>
%msg%n
</pattern>
</encoder>
<!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--路径-->
<fileNamePattern>${logDir}/logs/info.%d.log</fileNamePattern>
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
</appender>
<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<encoder>
<pattern>
%msg%n
</pattern>
</encoder>
<!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--路径-->
<fileNamePattern>${logDir}/logs/error.%d.log</fileNamePattern>
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
</appender>
<root level="info">
<appender-ref ref="consoleLog"></appender-ref>
<appender-ref ref="fileInfoLog"></appender-ref>
<appender-ref ref="fileErrorLog"></appender-ref>
</root>
</configuration>
4.以上就是配置的步骤,接下来要使用,可以在需要记录日志的类中导入slf4
接着通过日志工厂获得Logger的对象
这样使用logger对象的方法就可以记录日志。
四、lobmbok
如果觉得在每个类中去获取当前类的Logger对象比较麻烦,那也可以使用Lobmbok这个插件,通过@Slf4j这个注解去获得log对象,这也是现在新流行的做法。