logback配置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了logback配置相关的知识,希望对你有一定的参考价值。

logback配置

    Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块:logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个 改良版本。此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging。logback-access访问模块与Servlet容器集成提供通过Http来访问日志的功能。

一、LogBack、Slf4j和Log4j之间的关系

    Slf4j是The Simple Logging Facade for Java的简称,是一个简单日志门面抽象框架,它本身只提供了日志Facade API和一个简单的日志类实现,一般常配合Log4j,LogBack,java.util.logging使用。Slf4j作为应用层的Log接入时,程序可以根据实际应用场景动态调整底层的日志实现框架(Log4j/LogBack/JdkLog…)

    LogBack和Log4j都是开源日记工具库,LogBack是Log4j的改良版本,比Log4j拥有更多的特性,同时也带来很大性能提升。

    LogBack官方建议配合Slf4j使用,这样可以灵活地替换底层日志框架。

二、 LogBack的结构

    LogBack被分为3个组件,logback-core, logback-classic 和 logback-access。

    其中logback-core提供了LogBack的核心功能,是另外两个组件的基础。

    logback-classic则实现了Slf4j的API,所以当想配合Slf4j使用时,需要将logback-classic加入classpath。

    logback-access是为了集成Servlet环境而准备的,可提供HTTP-access的日志接口。

三、LogBack配置

<?xml version="1.0" encoding="utf-8" standalone="no"?>

<!--scan="true":配置文件若发生改变,会自动重新加载配置问价
    scanPeriod="60 seconds" :当scan为true时,此属性生效。60 seconds表示每分钟扫描配置文件看看是否有变化
    debug="false":若为true,将会打印logback内部的日志信息   -->
<configuration scan="true" scanPeriod="60 seconds" debug="false">

    <!-- 定义四个全局变量 -->
    <!-- logback日志级别(从小到大):TRACE<DEBAGE<INFO<WARN<ERROR -->
    <property name="log.level" value="debug"/> <!-- 日志级别 -->
    <property name="log.maxHistory" value="30"/>  <!-- 最大的历史保留时间,这里为30天 -->
    <property name="log.filePath" value="${catalina.base}/logs/webapps"/> <!-- 日志存储的根路径 -->
    <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS}[%thread]%-5level%logger{50}-%msg%n"/>  <!-- 日志展现的格式 -->
    <!-- %d{yyyy-MM-dd HH:mm:ss.SSS}:时间格式
         [%thread]:程序是由哪一个线程执行的
         %-5level:显示日志界别。-5表示缩进5位显示
         %logger{50}-%msg:某一个类里面输出的相关信息
         %n:换行 -->

    <!-- 控制台设置 -->
    <!--appender标签:日志输出的位置配置  
        name="consoleAppender":名字
        class="ch.qos.logback.core.ConsoleAppender:引入类"
        -->
    <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoder标签指定输出格式 -->
        <encoder>
            <pattern>${log.pattern}</pattern> <!-- log的输出格式,按照上面的log.pattern格式输出-->
        </encoder>
    </appender>

    <!-- debug -->
    <appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file >${log.filePath}/debug.log</file><!-- 文件路径,log.filePath是上面定义的路径 -->
        <!-- 滚动策略 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 设置文件名称 ,用绝对路径-->
            <fileNamePattern>${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
            <maxHistory>${log.maxHistory}</maxHistory>  <!-- 日志最大保存历史数量 -->
        </rollingPolicy>
        <!-- encoder标签指定输出格式 -->
        <encoder>
            <pattern>${log.pattern}</pattern><!-- log的输出格式,按照上面的log.pattern格式输出-->
        </encoder>
        <!-- 过滤器 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level> <!-- 只记录debug级别的日志信息 -->
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch> <!-- 若不是debug级别日志,则过滤掉 -->
        </filter>
    </appender>

    <!-- INFO -->
    <appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file >${log.filePath}/info.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.filePath}/info/info.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
            <maxHistory>${log.maxHistory}</maxHistory> 
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- error -->
    <appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file >${log.filePath}/error.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.filePath}/error/error.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
            <maxHistory>${log.maxHistory}</maxHistory>  
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 
         name:指定扫描的包
         level:只记录哪一个级别以上的日志
         additivity="true":会把父类(下面的root标签)中的内容包括进来,即也会在控制台输出-->
    <logger name="cn.qiuuuu" level="${log.level}" additivity="true">
        <!-- 与上面三个appender绑定 -->
        <appender-ref ref="debugAppender" />  
        <appender-ref ref="infoAppender" />
        <appender-ref ref="errorAppender" />
    </logger>

    <!--  -->
    <root level="info">
        <appender-ref ref="consoleAppender" /><!-- 与上面的appender绑定,控制台输出 -->
    </root>

</configuration>

以上是关于logback配置的主要内容,如果未能解决你的问题,请参考以下文章

日志框架之Logback的使用与详细配置

logback介绍和配置详解

Spring Boot - Logback配置日志要考虑哪些因素

SpringBoot整合+logback日志配置

logback工作原理研究

logback使用以及详细配置