SpringBoot之Logback日志文件配置

概述

Logback是一個日志框架,Logback和Log4j都是開源的日志工具庫,Logback是Log4j的改良版本,內置實現(xiàn)了slf4j,比Log4j擁有更多的特性,性能也帶來很大提升。SpringBoot默認內置了Logback日志框架,Spring Boot 集成logback需要添加 spring-boot-starter-logging 依賴,而此依賴已經在 spring-boot-starter 中添加過了,所以不用再添加此依賴了

Log4j建議只使用四個級別,優(yōu)先級從高到低分別是 ERROR、WARN、INFO、DEBUG,優(yōu)先級高的將被打印出來。(logback通用)
通過定義級別,可以作為應用程序中相應級別的日志信息的開關。

  • 比如在這里定義了INFO級別,則應用程序中所有DEBUG級別的日志信息將不被打印出來。(設置INFO級別,即:>=INFO 生效*

配置詳解

默認情況下,SpringBoot會用Logback來記錄日志,并用INFO級別輸出到控制臺。

configuration

根節(jié)點 <configuration> 下面包含三個屬性:

  • scan: 當此屬性設置為true時,配置文件如果發(fā)生改變,將會被重新加載,默認值為true。
  • scanPeriod: 設置監(jiān)測配置文件是否有修改的時間間隔,如果沒有給出時間單位,默認單位是毫秒。當scan為true時,此屬性生效。默認的時間間隔為1分鐘。
  • debug: 當此屬性設置為true時,將打印出logback內部日志信息,實時查看logback運行狀態(tài)。默認值為false。示例:
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!--其他配置省略-->
</configuration>

appender

<appender>:負責謝日志的組件,它有兩個必要屬性name和class。name指定appender名稱,class指定appender的全限定名。

ConsoleAppender

ConsoleAppender 把日志輸出到控制臺,有以下子節(jié)點:

<encoder> :對日志進行格式化

<target>:字符串System.out(默認)或者System.err

示例:把 >=DEBUG 級別的日志都輸出到控制臺

<configuration>
   <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
      <encoder>
         <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
      </encoder>
   </appender>

   <root level="DEBUG">
      <appender-ref ref="STDOUT" />
   </root>
</configuration>

FileAppender

<FileAppender>:把日志添加到文件,有以下子節(jié)點:

  • <file>:被寫入的文件名,可以是相對目錄,也可以是絕對目錄,如果上級目錄不存在會自動創(chuàng)建,沒有默認值。
  • <append> :如果是 true,日志被追加到文件結尾,如果是 false,清空現(xiàn)存文件,默認是true。
  • <encoder> :對記錄事件進行格式化。(具體參數(shù)稍后講解 )
  • <prudent> :如果是 true,日志會被安全的寫入文件,即使其他的FileAppender也在向此文件做寫入操作,效率低,默認是 false。

示例:把 >= DEBUG 級別的日志都輸出到 testFile.log 文件:

<configuration>
      <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>testFile.log</file>
        <append>true</append>
        <encoder>
          <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
      </appender>

      <root level="DEBUG">
      <appender-ref ref="FILE" />
      </root>
    </configuration>

RollingFileAppender

<RollingFileAppender> :滾動記錄文件,先將日志記錄到指定文件,當符合某個條件時,將日志記錄到其它文件。有以下子節(jié)點:

  • <file> :被寫入的文件名,可以是相對目錄,也可以是絕對目錄,如果上級目錄不存在會自動創(chuàng)建,沒有默認值。
  • <append> :如果是 true,日志被追加到文件結尾,如果是 false,清空現(xiàn)存文件,默認是true。
  • <rollingPolicy> : 當發(fā)生滾動時,決定RollingFileAppender的行為,涉及文件移動和重命名。屬性class定義具體的滾動策略類
TimeBasedRollingPolicy

class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy: 最常用的滾動策略,它根據(jù)時間來制定滾動策略,既負責滾動也負責出發(fā)滾動。有以下子節(jié)點:

  • :必要節(jié)點,包含文件名及“%d”轉換符,“%d”可以包含一個java.text.SimpleDateFormat指定的時間格式,如:%d{yyyy-MM}。
    如果直接使用 %d,默認格式是 yyyy-MM-dd。RollingFileAppender的file字節(jié)點可有可無,通過設置file,可以為活動文件和歸檔文件指定不同位置,當前日志總是記錄到file指定的文件(活動文件),活動文件的名字不會改變;
    如果沒設置file,活動文件的名字會根據(jù)fileNamePattern 的值,每隔一段時間改變一次?!?”或者“\”會被當做目錄分隔符。
  • : 可選節(jié)點,控制保留的歸檔文件的最大數(shù)量,超出數(shù)量就刪除舊文件。假設設置每個月滾動,且是6,則只保存最近6個月的文件,刪除之前的舊文件。注意,刪除舊文件是,那些為了歸檔而創(chuàng)建的目錄也會被刪除。
SizeBasedTriggeringPolicy

class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy : 查看當前活動文件的大小,如果超過指定大小會告知RollingFileAppender 觸發(fā)當前活動文件滾動。只有一個節(jié)點:

  • : 這是活動文件的大小,默認值是10MB。
  • :當為true時,不支持FixedWindowRollingPolicy。支持TimeBasedRollingPolicy,但是有兩個限制,1不支持也不允許文件壓縮,2不能設置file屬性,必須留空。
  • : 告知 RollingFileAppender 合適激活滾動。
FixedWindowRollingPolicy

class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy 根據(jù)固定窗口算法重命名文件的滾動策略。有以下子節(jié)點:

  • : 窗口索引最小值
  • : 窗口索引最大值,當用戶指定的窗口過大時,會自動將窗口設置為12。
  • : 必須包含“%i”例如,假設最小值和最大值分別為1和2,命名模式為 mylog%i.log,會產生歸檔文件mylog1.log和mylog2.log。還可以指定文件壓縮選項,例如,mylog%i.log.gz 或者 沒有l(wèi)og%i.log.zip

示例:每天生成一個日志文件,保存30天的日志文件:

<configuration>
          <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>

          <root level="DEBUG">
            <appender-ref ref="FILE" />
          </root>
        </configuration>

<logger>

<logger> :用來設置某一個包或具體的某一個類的日志打印級別、以及指定。

```: 僅有一個name屬性,一個可選的level和一個可選的addtivity屬性。

可以包含零個或多個元素,標識這個appender將會添加到這個logger。

  • name: 用來指定受此loger約束的某一個包或者具體的某一個類。
  • level: 用來設置打印級別,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL和OFF,還有一個特殊值INHERITED或者同義詞NULL,代表強制執(zhí)行上級的級別。 如果未設置此屬性,那么當前l(fā)oger將會繼承上級的級別。
  • addtivity: 是否向上級logger傳遞打印信息。默認是true??梢园銈€或多個元素,標識這個appender將會添加到這個logger。

<root>

子節(jié)點:它也是元素,但是它是根loger,是所有的上級。只有一個level屬性,因為name已經被命名為"root",且已經是最上級了。

level: 用來設置打印級別,大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL和OFF,不能設置為INHERITED或者同義詞NULL。 默認是DEBUG。

同一樣,可以包含零個或多個元素,標識這個appender將會添加到這個logger。

示例:常用logger配置:

<!-- show parameters for hibernate sql 專為 Hibernate 定制 -->
<logger name="org.hibernate.type.descriptor.sql.BasicBinder"  level="TRACE" />
<logger name="org.hibernate.type.descriptor.sql.BasicExtractor"  level="DEBUG" />
<logger name="org.hibernate.SQL" level="DEBUG" />
<logger name="org.hibernate.type" level="TRACE" />
<logger name="org.hibernate.engine.QueryParameters" level="DEBUG" />
<logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" />

<!--myibatis log configure-->
<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"/>

<contextName>

子節(jié)點:用來設置上下文名稱,每個logger都關聯(lián)到logger上下文,默認上下文名稱為default。但可以使用設置成其他名字,用于區(qū)分不同應用程序的記錄。一旦設置,不能修改。

示例:

<configuration scan="true" scanPeriod="60 seconds" debug="false">
     <contextName>myAppName</contextName>
    <!--其他配置省略-->
</configuration>

<property>

子節(jié)點 :用來定義變量值,它有兩個屬性name和value,通過定義的值會被插入到 logger 上下文中,可以通過 ${} 來使用變量。

name: 變量的名稱
value: 的值時變量定義的值

示例:

<configuration scan="true" scanPeriod="60 seconds" debug="false">
   <property name="APP_Name" value="myAppName" />
   <contextName>${APP_Name}</contextName>
   <!--其他配置省略-->
</configuration>

<timestamp>

子節(jié)點 :獲取時間戳字符串,他有兩個屬性key和datePattern。

key: 標識此 的名字;
    datePattern: 設置將當前時間(解析配置文件的時間)轉換為字符串的模式,遵循java.txt.SimpleDateFormat的格式。

示例:

<configuration scan="true" scanPeriod="60 seconds" debug="false">
      <timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/>
      <contextName>${bySecond}</contextName>
      <!-- 其他配置省略-->
    </configuration>

完整配置demo

示例一

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">

    <!--定義日志文件的存儲地址,如果是在window中可以使用/開頭的絕對地址,在linux中不要使用 / 開頭的地址,因為其表示絕對地址,linux中要使用相對地址時 不要以 盤符開頭即可-->
    <property name="logPath" value="/logs" />
    <!--日志文件保留天數(shù),最長支持30天-->
    <property name="MaxHistory" value="30"/>
    <!--日志文件最大的大小,支持KB,MB-->
    <property name="MaxFileSize" value="100MB"/>

    <!--控制臺日志, 控制臺輸出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度,%msg:日志消息,%n是換行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>

    <!--文件日志, 按照每天生成日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件輸出的文件名-->
            <FileNamePattern>${logPath}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日志文件保留天數(shù)-->
            <MaxHistory>${MaxHistory}</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
        <!--日志文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>${MaxFileSize}</MaxFileSize>
        </triggeringPolicy>
    </appender>

    <!-- show parameters for hibernate sql 專為 Hibernate 定制 -->
    <logger name="org.hibernate.type.descriptor.sql.BasicBinder"  level="TRACE" />
    <logger name="org.hibernate.type.descriptor.sql.BasicExtractor"  level="DEBUG" />
    <logger name="org.hibernate.SQL" level="DEBUG" />
    <logger name="org.hibernate.type" level="TRACE" />
    <logger name="org.hibernate.engine.QueryParameters" level="DEBUG" />
    <logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" />

    <!--mybatis log configure-->
    <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="DEBUG">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE"/>
    </root>
  
  <!-- 根據(jù)不同環(huán)境配置不同日志輸出 -->
  <springProfile name="local">
        <root level="debug">
            <appender-ref ref="console" />
        </root>
    </springProfile>
    <!--開發(fā)環(huán)境:打印控制臺-->
    <springProfile name="dev">
        <root level="debug">
            <appender-ref ref="STDOUT" />
            <appender-ref ref="FILE"/>
        </root>
    </springProfile>
    <!-- test,pro 環(huán)境 -->
    <springProfile name="test,pro">
        <root level="info">
            <appender-ref ref="STDOUT" />
            <appender-ref ref="FILE"/>
        </root>
    </springProfile>
</configuration>

折疊 

示例二:過濾掉某些級別的信息

我們把debug,error,info等級別的日志,都分開,分別打印輸出在不同的文件中。

需要做的就是,在不同的 日志級別中 過濾掉即可。

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

<configuration>
    <!-- 控制臺輸出日志 -->
    <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>
                %d - %msg%n   <!-- 控制臺打印日志文件體 時間-信息 -->
            </pattern>
        </layout>
    </appender>

    <!-- 輸出info級別的日志 -->
    <appender name="infoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!-- 在info中過濾掉掉 error 級別的信息 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>DENY</onMatch>  <!-- 如果命中就禁止這條日志 -->
            <onMismatch>ACCEPT</onMismatch>  <!-- 如果沒有命中就使用這條規(guī)則 -->
        </filter>

        <encoder>
            <pattern>
               %msg%n
            </pattern>
        </encoder>
        <!-- 滾動策略 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 設置info日志路徑 -->
            <fileNamePattern>E:\\IntelliJ IDEA\\logback\\info.%d.log</fileNamePattern>
        </rollingPolicy>
    </appender>

    <!-- 輸出error級別的日志 -->
    <appender name="errorLog" 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">
            <!-- 設置error日志路徑 -->
            <fileNamePattern>E:\\IntelliJ IDEA\\logback\\error.%d.log</fileNamePattern>
        </rollingPolicy>
    </appender>

    <!-- 設置默認日志級別為INFO,一般都設置為info -->
    <root level="info">
        <appender-ref ref="consoleLog"/>
        <appender-ref ref="infoLog"/>
        <appender-ref ref="errorLog"/>
    </root>
</configuration>

折疊 

可以結合示例一進行優(yōu)化。

示例三:自動壓縮存儲按照日期分割后的日志異步寫入

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
    <!-- 項目名稱 -->
    <property name="PROJECT_NAME" value="small-and-beautiful-blog" />
    <!--定義日志文件的存儲地址 勿在 LogBack 的配置中使用相對路徑-->
    <property name="LOG_HOME" value="./logs" />

    <!-- 控制臺輸出 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <withJansi>false</withJansi>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!-- 格式化輸出: %d: 日期; %-5level: 級別從左顯示5個字符寬度; %thread: 線程名; %logger: 類名; %M: 方法名; %line: 行號; %msg: 日志消息; %n: 換行符 -->
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] [%logger{50}] [%M] [%line] - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- ERROR日志文件,記錄錯誤日志 -->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/${PROJECT_NAME}/error.log</file>
        <!-- 過濾器,只打印ERROR級別的日志 -->
        <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.SizeAndTimeBasedRollingPolicy">
            <!--日志文件輸出的文件名-->
            <FileNamePattern>${LOG_HOME}/${PROJECT_NAME}/%d{yyyy-MM-dd}/error.%i.zip</FileNamePattern>
            <!--日志文件保留天數(shù)-->
            <MaxHistory>3650</MaxHistory>
            <!--日志文件最大的大小-->
            <MaxFileSize>100MB</MaxFileSize>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!-- 格式化輸出: %d: 日期; %-5level: 級別從左顯示5個字符寬度; %thread: 線程名; %logger: 類名; %M: 方法名; %line: 行號; %msg: 日志消息; %n: 換行符 -->
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] [%logger{50}] [%M] [%line] - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- INFO日志文件,用于記錄重要日志信息 -->
    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/${PROJECT_NAME}/info.log</file>
        <!-- 過濾器,只打印INFO級別的日志 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件輸出的文件名-->
            <FileNamePattern>${LOG_HOME}/${PROJECT_NAME}/%d{yyyy-MM-dd}/info.%i.zip</FileNamePattern>
            <!--日志文件保留天數(shù)-->
            <MaxHistory>3650</MaxHistory>
            <!--日志文件最大的大小-->
            <MaxFileSize>100MB</MaxFileSize>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!-- 格式化輸出: %d: 日期; %-5level: 級別從左顯示5個字符寬度; %thread: 線程名; %logger: 類名; %M: 方法名; %line: 行號; %msg: 日志消息; %n: 換行符 -->
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] [%logger{50}] [%M] [%line] - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 打印的SQL日志文件,用于執(zhí)行的SQL語句和參數(shù)信息 -->
    <appender name="SQL_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/${PROJECT_NAME}/sql.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件輸出的文件名-->
            <FileNamePattern>${LOG_HOME}/${PROJECT_NAME}/%d{yyyy-MM-dd}/sql.%i.zip</FileNamePattern>
            <!--日志文件保留天數(shù)-->
            <MaxHistory>3650</MaxHistory>
            <!--日志文件最大的大小-->
            <MaxFileSize>100MB</MaxFileSize>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!-- 格式化輸出: %d: 日期; %-5level: 級別從左顯示5個字符寬度; %thread: 線程名; %logger: 類名; %M: 方法名; %line: 行號; %msg: 日志消息; %n: 換行符 -->
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] [%logger{50}] [%M] [%line] - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- API請求被訪問的日志文件,記錄請求的URL和攜帶的參數(shù) -->
    <appender name="REQUEST_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/${PROJECT_NAME}/request.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件輸出的文件名-->
            <FileNamePattern>${LOG_HOME}/${PROJECT_NAME}/%d{yyyy-MM-dd}/request.%i.zip</FileNamePattern>
            <!--日志文件保留天數(shù)-->
            <MaxHistory>3650</MaxHistory>
            <!--日志文件最大的大小-->
            <MaxFileSize>100MB</MaxFileSize>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!-- 格式化輸出: %d: 日期; %-5level: 級別從左顯示5個字符寬度; %thread: 線程名; %logger: 類名; %M: 方法名; %line: 行號; %msg: 日志消息; %n: 換行符 -->
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] [%logger{50}] [%M] [%line]- %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!-- 異步輸出INFO_FILE -->
    <appender name="ASYNC_INFO_FILE" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 更改默認的隊列的深度,該值會影響性能.默認值為256 -->
        <queueSize>256</queueSize>
        <!-- 默認情況下,當阻塞隊列的剩余容量為20%時,它將丟棄TRACE,DEBUG和INFO級別的事件,僅保留WARN和ERROR級別的事件。要保留所有事件,請將discardingThreshold設置為0。 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 添加附加的appender,使用前面定義的name,最多只能添加一個 -->
        <appender-ref ref="INFO_FILE"/>
    </appender>

    <!-- 異步輸出ERROR_FILE -->
    <appender name="ASYNC_ERROR_FILE" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 更改默認的隊列的深度,該值會影響性能.默認值為256 -->
        <queueSize>256</queueSize>
        <!-- 默認情況下,當阻塞隊列的剩余容量為20%時,它將丟棄TRACE,DEBUG和INFO級別的事件,僅保留WARN和ERROR級別的事件。要保留所有事件,請將discardingThreshold設置為0。 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 添加附加的appender,使用前面定義的name,最多只能添加一個 -->
        <appender-ref ref="ERROR_FILE"/>
    </appender>

    <!-- 異步輸出SQL_FILE -->
    <appender name="ASYNC_SQL_FILE" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 更改默認的隊列的深度,該值會影響性能.默認值為256 -->
        <queueSize>256</queueSize>
        <!-- 默認情況下,當阻塞隊列的剩余容量為20%時,它將丟棄TRACE,DEBUG和INFO級別的事件,僅保留WARN和ERROR級別的事件。要保留所有事件,請將discardingThreshold設置為0。 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 添加附加的appender,使用前面定義的name,最多只能添加一個 -->
        <appender-ref ref="SQL_FILE"/>
    </appender>

    <!-- 異步輸出REQUEST_FILE -->
    <appender name="ASYNC_REQUEST_FILE" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 更改默認的隊列的深度,該值會影響性能.默認值為256 -->
        <queueSize>256</queueSize>
        <!-- 默認情況下,當阻塞隊列的剩余容量為20%時,它將丟棄TRACE,DEBUG和INFO級別的事件,僅保留WARN和ERROR級別的事件。要保留所有事件,請將discardingThreshold設置為0。 -->
        <discardingThreshold>0</discardingThreshold>
        <!-- 添加附加的appender,使用前面定義的name,最多只能添加一個 -->
        <appender-ref ref="REQUEST_FILE"/>
    </appender>

    <!-- 輸出error信息到文件-->
    <logger name="error" additivity="true">
        <appender-ref ref="ERROR_FILE"/>
    </logger>

    <!-- 輸出info信息到文件-->
    <logger name="info" additivity="true">
        <appender-ref ref="INFO_FILE"/>
    </logger>

    <!-- 輸出request信息到文件-->
    <logger name="request" level="INFO" additivity="false">
        <appender-ref ref="REQUEST_FILE" />
    </logger>

    <!-- 輸出SQL到控制臺和文件-->
    <logger name="org.hibernate.SQL" additivity="false">
        <level value="DEBUG" />
        <appender-ref ref="SQL_FILE" />
    </logger>

    <!-- 輸出SQL的參數(shù)到控制臺和文件-->
    <logger name="org.hibernate.type.descriptor.sql.BasicBinder" additivity="false" level="TRACE">
        <level value="TRACE" />
        <appender-ref ref="SQL_FILE" />
    </logger>

    <!-- 開發(fā)環(huán)境下的日志配置 -->
    <springProfile name="dev">
        <root level="INFO">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="ERROR_FILE" />
            <appender-ref ref="INFO_FILE" />
        </root>
    </springProfile>

    <!-- 測試環(huán)境下的日志配置 -->
    <springProfile name="test">
        <root level="INFO">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="ERROR_FILE" />
            <appender-ref ref="INFO_FILE" />
        </root>
    </springProfile>

    <!-- 生產環(huán)境下的日志配置 -->
    <springProfile name="prod">
        <root level="INFO">
            <appender-ref ref="CONSOLE" />
            <appender-ref ref="ERROR_FILE" />
            <appender-ref ref="INFO_FILE" />
        </root>
    </springProfile>
</configuration>

折疊 

在application.properties中通過 logging.config=classpath:xxx.xml 來指定配置文件

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容