logback-spring.xml配置示例(主要是文件歸檔)
<?xml version="1.0" encoding="utf-8"?>
<!--
根節(jié)點(diǎn)<configuration>,包含下面三個(gè)屬性:
scan: 當(dāng)此屬性設(shè)置為true時(shí),配置文件如果發(fā)生改變,將會(huì)被重新加載,默認(rèn)值為true。
scanPeriod: 設(shè)置監(jiān)測(cè)配置文件是否有修改的時(shí)間間隔,如果沒有給出時(shí)間單位,默認(rèn)單位是毫秒。當(dāng)scan為true時(shí),此屬性生效。默認(rèn)的時(shí)間間隔為1分鐘。
debug: 當(dāng)此屬性設(shè)置為true時(shí),將打印出logback內(nèi)部日志信息,實(shí)時(shí)查看logback運(yùn)行狀態(tài)。默認(rèn)值為false。
-->
<configuration xmlns="http://ch.qos.logback/xml/ns/logback"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ch.qos.logback/xml/ns/logback
https://raw.githubusercontent.com/enricopulatzo/logback-XSD/master/src/main/xsd/logback.xsd">
<!-- 從 application.yaml 中獲取應(yīng)用名稱 -->
<springProperty name="appName" source="spring.application.name" defaultValue="defaultAppName" />
<property name="log-pattern" value="%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } [%10.10t] %-40.40logger{39} : %m%n"/>
<!-- 定義控制臺(tái)輸出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log-pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 定義保存文件滾動(dòng)策略 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>./log/${appName}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>./log/%d{yyyy-MM-dd}/${appName}-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>30</maxHistory>
<totalSizeCap>100GB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>${log-pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 將控制臺(tái)輸出和保存文件兩個(gè) appender 綁定到 root logger -->
<root level="info">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
每個(gè)日志文件的最大大小為 10MB,最大歷史文件數(shù)量為 30 個(gè),總存儲(chǔ)空間上限為 100GB。每天會(huì)生成一個(gè)新的子目錄,子目錄的命名格式為 yyyy-MM-dd
注:
springboot默認(rèn)的日志輸出格式如下,其中包含了彩色字體渲染,上面的logback-spring.xml使用了springboot的默認(rèn)格式,但是去掉了彩色渲染
%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}
2023.08.08更新
使用異步Appender包裝
<?xml version="1.0" encoding="utf-8"?>
<configuration xmlns="http://ch.qos.logback/xml/ns/logback"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ch.qos.logback/xml/ns/logback
https://raw.githubusercontent.com/enricopulatzo/logback-XSD/master/src/main/xsd/logback.xsd">
<!-- 根節(jié)點(diǎn)配置 -->
<springProperty name="appName" source="spring.application.name" defaultValue="defaultAppName" />
<property name="log-pattern" value="%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } [%10.10t] %-40.40logger{39} : %m%n" />
<!-- 定義異步Appender -->
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="FILE" />
<!--
指定異步隊(duì)列的大小,即可以容納的最大未處理的日志消息數(shù)量。當(dāng)隊(duì)列滿時(shí),新的日志消息將被阻塞或丟棄,取決于discardingThreshold的配置。在這里,隊(duì)列大小設(shè)置為512
-->
<queueSize>512</queueSize>
<!--
指定當(dāng)隊(duì)列已滿時(shí)的丟棄閾值。當(dāng)隊(duì)列中未處理的日志消息數(shù)量達(dá)到丟棄閾值時(shí),新的日志消息將被丟棄。discardingThreshold的值可以是正整數(shù)或者-1,表示不丟棄任何日志消息。在這里,丟棄閾值設(shè)置為0,即當(dāng)隊(duì)列已滿時(shí),不會(huì)丟棄任何日志消息。
-->
<discardingThreshold>0</discardingThreshold>
</appender>
<!-- 定義控制臺(tái)輸出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log-pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 定義保存文件滾動(dòng)策略 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>./log/${appName}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>./log/%d{yyyy-MM-dd}/${appName}-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>1MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>20</maxHistory>
<totalSizeCap>10MB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>${log-pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 將異步Appender和控制臺(tái)輸出Appender綁定到root logger -->
<root level="info">
<appender-ref ref="ASYNC" />
<appender-ref ref="CONSOLE" />
</root>
</configuration>
參考
logback異步日志AsyncAppender配置_loophome的博客-CSDN博客
=======================
2024.1.3更新
可以直接引入spring的defaults.xml,使用其定義的變量,如控制臺(tái)輸出格式 ${CONSOLE_LOG_PATTERN}
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<springProperty scope="context" name="application.name" source="spring.application.name"/>
<!--輸出到控制臺(tái)-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<!-- 設(shè)置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<root level="info">
<appender-ref ref="console"/>
</root>
</configuration>
3.15更新
warn級(jí)別以上的日志單獨(dú)保存到另外文件
需要使用新的AsyncAppender
<?xml version="1.0" encoding="utf-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">>
<!-- 根節(jié)點(diǎn)配置 -->
<springProperty name="appName" source="spring.application.name" defaultValue="defaultAppName" />
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<property name="log-pattern" value="%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } [%10.10t] %-40.40logger{39} : %m%n" />
<!-- 定義控制臺(tái)輸出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 定義保存文件滾動(dòng)策略 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>./log/${appName}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>./log/%d{yyyy-MM-dd}/${appName}-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>15</maxHistory>
<totalSizeCap>1000MB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>${log-pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 定義保存文件滾動(dòng)策略 -->
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>./log/error/${appName}-error.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>./log/error/%d{yyyy-MM-dd}/${appName}-error-%d{yyyy-MM-dd}-%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>15</maxHistory>
<totalSizeCap>1000MB</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>${log-pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
<!-- warn error級(jí)別 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
</appender>
<!-- 定義異步Appender -->
<appender name="FILE_ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="FILE" />
<appender-ref ref="ERROR_FILE" />
<!--
指定異步隊(duì)列的大小,即可以容納的最大未處理的日志消息數(shù)量。當(dāng)隊(duì)列滿時(shí),新的日志消息將被阻塞或丟棄,取決于discardingThreshold的配置。在這里,隊(duì)列大小設(shè)置為512
-->
<queueSize>512</queueSize>
<!--
指定當(dāng)隊(duì)列已滿時(shí)的丟棄閾值。當(dāng)隊(duì)列中未處理的日志消息數(shù)量達(dá)到丟棄閾值時(shí),新的日志消息將被丟棄。discardingThreshold的值可以是正整數(shù)或者-1,表示不丟棄任何日志消息。在這里,丟棄閾值設(shè)置為0,即當(dāng)隊(duì)列已滿時(shí),不會(huì)丟棄任何日志消息。
-->
<discardingThreshold>0</discardingThreshold>
</appender>
<!-- 定義異步Appender -->
<appender name="ERROR_FILE_ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="ERROR_FILE" />
<!--
指定異步隊(duì)列的大小,即可以容納的最大未處理的日志消息數(shù)量。當(dāng)隊(duì)列滿時(shí),新的日志消息將被阻塞或丟棄,取決于discardingThreshold的配置。在這里,隊(duì)列大小設(shè)置為512
-->
<queueSize>512</queueSize>
<!--
指定當(dāng)隊(duì)列已滿時(shí)的丟棄閾值。當(dāng)隊(duì)列中未處理的日志消息數(shù)量達(dá)到丟棄閾值時(shí),新的日志消息將被丟棄。discardingThreshold的值可以是正整數(shù)或者-1,表示不丟棄任何日志消息。在這里,丟棄閾值設(shè)置為0,即當(dāng)隊(duì)列已滿時(shí),不會(huì)丟棄任何日志消息。
-->
<discardingThreshold>0</discardingThreshold>
</appender>
<!-- 將異步Appender和控制臺(tái)輸出Appender綁定到root logger -->
<root level="info">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE_ASYNC" />
<appender-ref ref="ERROR_FILE_ASYNC" />
</root>
</configuration>