logback配置解析(简单易懂)

1,033 阅读1分钟

概要:

logback的配置,需要配置输出源appender,打日志的loger(子节点)和root(根节点),实际上,它输出日志是从子节点开始,子节点如果有输出源直接输入,如果无,判断配置的addtivity,是否像上级传递,即是否向root传递,传递则采用root的输出源,否则不输出日志。

appender:

负责写日志的组件,它有两个必要属性name和class。name指定appender名称,class指定appender的全限定名,如ConsoleAppender 把日志输出到控制台,该组件常用子节点等。

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
    <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern> 
    <maxHistory>30</maxHistory> 
  </rollingPolicy> 
  <encoder> 
    <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> 
  </encoder> 
</appender> 

logger:        

用来设置某一个包或具体的某一个类的日志打印级别、以及指定。仅有一个name属性,一个可选的level和一个可选的addtivity属性。

root:

它也是元素,但是它是根loger,是所有的上级。只有一个level属性,因为name已经被命名为"root",且已经是最上级了。

    <logger name="com.apache.ibatis" level="TRACE"/>
    <logger name="java.sql.Connection" level="DEBUG"/>
    <logger name="java.sql.Statement" level="DEBUG"/>
    <logger name="java.sql.PreparedStatement" level="DEBUG"/>
    
    <!-- 日志输出级别 -->
    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root> 

示例:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
 
    <!-- <include resource="org/springframework/boot/logging/logback/base.xml"/> -->
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
 
    <!-- 脱敏处理 -->
    <conversionRule conversionWord="ds" converterClass="cn.marketin.crm.common.logback.DesensitizationConverter" />
 
    <springProperty scope="context" name="LOGFILE" source="logging.file.path"/>
 
    <property name="LOG_FILE_NAME" value="ma-api"/>
 
    <!--每天生成日志的类-->
    <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 脱敏处理 -->
        <encoder>
            <charset>UTF-8</charset>
            <pattern>%ds(${FILE_LOG_PATTERN})</pattern>
        </encoder>
        <file>${LOGFILE}/${LOG_FILE_NAME}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOGFILE}/${LOG_FILE_NAME}.%d{yyyyMMdd}.%i.gz</fileNamePattern>
            <maxFileSize>1GB</maxFileSize>
            <maxHistory>360</maxHistory>
            <totalSizeCap>50GB</totalSizeCap>
        </rollingPolicy>
    </appender>
 
    <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>  <!--//打印error-->
        </filter>
        <!-- 脱敏处理 -->
        <encoder>
            <charset>UTF-8</charset>
            <pattern>%ds(${FILE_LOG_PATTERN})</pattern>
        </encoder>
        <file>${LOGFILE}/${LOG_FILE_NAME}.log.error</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOGFILE}/${LOG_FILE_NAME}.%d{yyyyMMdd}.%i.error.gz</fileNamePattern>
            <maxFileSize>1GB</maxFileSize>
            <maxHistory>360</maxHistory>
            <totalSizeCap>50GB</totalSizeCap>
        </rollingPolicy>
    </appender>
 
    <appender name="requestLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 脱敏处理 -->
        <encoder>
            <pattern>%ds(${FILE_LOG_PATTERN})</pattern>
        </encoder>
        <file>${LOGFILE}/${LOG_FILE_NAME}.request.date</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOGFILE}/${LOG_FILE_NAME}.%d{yyyyMMdd}.%i.request.data</fileNamePattern>
            <maxFileSize>1GB</maxFileSize>
            <maxHistory>360</maxHistory>
            <totalSizeCap>50GB</totalSizeCap>
        </rollingPolicy>
    </appender>
 
    <!-- 3rdparty Loggers -->
    <logger name="org.springframework">
        <level value="info"/>
    </logger>
    <logger name="org.springframework.web.servlet">
        <level value="info"/>
    </logger>
 
    <logger name="org.springframework.beans.factory.support.DefaultListableBeanFactory">
        <level value="error"/>
    </logger>
 
    <logger name="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <level value="info"/>
    </logger>
 
    <logger name="org.springframework.http.client">
        <level value="debug"/>
    </logger>
 
    <logger name="org.springframework.web.client">
        <level value="debug"/>
    </logger>
 
    <!-- 引用requestLog打印请求信息记录 -->
    <logger name="cn.marketin.crm.common.web.mvc.log" additivity="false" level="INFO">
        <appender-ref ref="fileInfoLog"/>
        <appender-ref ref="fileErrorLog"/>
        <!-- 引用自定义的appender -->
        <appender-ref ref="requestLog"/>
        <!-- 这里也引用控制台appender,才能在控制台中看到我们的日志 -->
        <appender-ref ref="CONSOLE"/>
    </logger>
 
    <!-- 项目的日志级别定义 -->
    <logger name="cn.marketin.crm">
        <level value="debug"/>
    </logger>
 
    <logger name="cn.marketin.crm.manager">
        <level value="debug"/>
    </logger>
 
    <root level="INFO">
        <appender-ref ref="fileInfoLog"/>
        <appender-ref ref="fileErrorLog"/>
    </root>
 
</configuration>