使用slf4j和logback记录日志

前言
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级别的日志
这里写图片描述

猜你喜欢

转载自blog.csdn.net/kity9420/article/details/81042580