前言
Logback是由log4j创始人设计的一个开源日志组件, 性能比log4j的性能还好, 将会逐步地替代掉log4j,Logback需要和slf4j一起使用,slf4j只提供接口,没有提供具体的实现,Logback很好的实现slf4j中的接口,现在来看看如何使用logback记录日志
导入依赖
logback依赖如下几个Jar包
slf4j-api.jar,logback-core.jar,logback-classic.jar,logback-access.jar
在pom.xml引入依赖包
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-access</artifactId>
<version>1.1.7</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.7</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.7</version>
</dependency>
配置日志文件
在src/main/resources目录下新增logback-dp.xml日志文件,内容如下
<?xml version="1.0" ?>
<configuration debug="false">
<!--控制台日志 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
<!--日志输出格式-->
%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %logger - %msg%n
</pattern>
</encoder>
</appender>
<!-- INFO级别日志,记录INFO级别及比INFO更高级别的日志-->
<appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>
<!--日志引文件路径-->
C:\workspace\logs\%d{yyyy-MM-dd}\dp.log
</fileNamePattern>
<!-- 日志保存15天,超过15天自动删除 -->
<maxHistory>15</maxHistory>
</rollingPolicy>
<encoder>
<pattern>
<!--日志输出格式-->
%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %logger - %msg%n
</pattern>
</encoder>
</appender>
<!-- ERROR级别日志,只记录Error级别日志 -->
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 过滤器,只记录ERROR级别的日志,如果日志级别等于配置级别,过滤器会根据onMath 和 onMismatch接收或拒绝日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>
<!--日志文件路径-->
C:\workspace\logs\%d{yyyy-MM-dd}\dp.error.log
</fileNamePattern>
<!-- 日志保存15天,超过15天自动删除 -->
<maxHistory>15</maxHistory>
</rollingPolicy>
<encoder>
<pattern>
<!--日志输出格式-->
%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %logger - %msg%n
</pattern>
</encoder>
</appender>
<root>
<!-- 日志级别 -->
<level value="INFO"/>
<appender-ref ref="CONSOLE"/>
<appender-ref ref="INFO"/>
<appender-ref ref="ERROR"/>
</root>
</configuration>
配置日志监听器
在web.xml文件中配置日志监听器
<context-param>
<param-name>logbackConfigLocation</param-name>
<param-value>classpath:logback-dp.xml</param-value>
</context-param>
<listener>
<listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>
</listener>
验证
//导入的包都是slf4j的包
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Controller
@RequestMapping("/taskwait")
public class TaskController{
private static final Logger logger = LoggerFactory.getLogger(TaskController.class);
@RequestMapping(value = { "/queryActivity.rf" }, method = RequestMethod.POST)
@ResponseBody
public void queryActivity(@RequestBody OTCActivityConditionVO conditionVO) {
logger.trace("logback的--trace日志--输出了");
logger.debug("logback的--debug日志--输出了");
logger.info("logback的--info日志--输出了");
logger.warn("logback的--warn日志--输出了");
logger.error("logback的--error日志--输出了");
}
}
指定root中的级别为info,只会输出info和比info级别更高的日志
同时在C:\workspace\logs\目录下生成了按日期命名的目录及文件
dp.log文件,记录了info,warn,error级别的日志,因为没有配置日志过滤规则,凡是info级别及比info更高级别的日志,都会记录到dp.log文件中
而dp.error.log文件中,只记录了error级别的日志,因为配置日志过滤规则,只匹配error级别的日志