log4j2配置日誌默認最大個數,以及自動刪除過期日誌文件的配置

親測有效
1.設置最大個數
2.定時清理過期日誌配置

log4j2.xml

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

<Configuration status="WARN" monitorInterval="300">   <!-- debug="true" xmlns:log4j="http://jakarta.apache.org/log4j/"-->
    <!-- 設置每天晚上12點清除過期日誌文件 -->
    <CronTriggeringPolicy schedule="0 0 0 * * ?"/>
    <properties>
        <property name="LOG_HOME">logs/kg</property>
        <property name="FILE_NAME">kg</property>
    </properties>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36}:%M(%L)] - %msg%xEx%n"/>
        </Console>
        <RollingRandomAccessFile name="MyFile"
                                 fileName="${LOG_HOME}/${FILE_NAME}.log"
                                 filePattern="${LOG_HOME}/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd-HH}-%i.log">
            <PatternLayout
                    pattern="[%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36}:%M(%L)] - %msg%xEx%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1"/>      <!--每1小時/分/... 生成一個文件, 時間依據filePattern的配置-->
                <SizeBasedTriggeringPolicy size="5 MB"/>
            </Policies>
            <DefaultRolloverStrategy max="30">
                <Delete basePath="${LOG_HOME}/$${date:yyyy-MM}/" maxDepth="2">
                    <IfFileName glob="*.log" />
                    <!--!Note: 這裏的age必須和filePattern協調, 後者是精確到HH, 這裏就要寫成xH, xd就不起作用
                    另外, 數字最好>2, 否則可能造成刪除的時候, 最近的文件還處於被佔用狀態,導致刪除不成功!-->
                    <!--7天-->
                    <IfLastModified age="168H" />
                </Delete>
            </DefaultRolloverStrategy>
        </RollingRandomAccessFile>
    </Appenders>

    <Loggers>
        <!--過濾掉spring和mybatis的一些無用的DEBUG信息-->
        <logger name="org.springframework" level="INFO"/>
        <logger name="org.mybatis" level="INFO"/>
        <Logger name="mylog" level="debug" additivity="false">
            <AppenderRef ref="MyFile"/>
            <AppenderRef ref="Console"/>
        </Logger>
        <Root level="debug">
            <AppenderRef ref="MyFile"/>
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>

</Configuration>

注意:

  • filePattern定義的日誌文件後綴精確的時間決定了定期生成日誌文件. 精確到dd, 即%d{yyyy-MM-dd}, 則會每天生成一個文件, 精確到HH, 則會每時生成一個文件, ...
  • <CronTriggeringPolicy schedule="0 0 0 * * ?"/> 這個標籤是設置什麼時候執行清理的,這裏設置的是每天凌晨具體可以參考:https://logging.apache.org/log4j/2.x/log4j-core/apidocs/org/apache/logging/log4j/core/util/CronExpression.html
  • Delete標籤內決定了刪除過期文件的規則. 需要注意這裏的IfLastModified .age要和filePattern精確的時間一致, 否則貌似無效.
  • 我這裏日誌文件會按日期放入子文件夾內, 所以要想統計總數, 需要遞歸統計, 故設置maxDepth=2.此參數表示指定文件夾下需要刪除文件的文件深度,如果不設置默認值爲1.

依賴jar包

我這裏的依賴可以實現, 將sfl4j類的日誌委託給log4j2實現. 所以項目中可以同時使用sfl4jlog4j類的日誌系統.版本不能低於2.8

   <properties>
        <log4j2.version>2.11.0</log4j2.version>
  </properties>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-web</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
        <!--用於與sfl4j保持橋接-->
        <dependency>
	        <groupId>org.slf4j</groupId>
	        <artifactId>slf4j-api</artifactId>
	        <version>1.7.21</version>
        </dependency>
        <dependency>
	        <groupId>org.apache.logging.log4j</groupId>
	        <artifactId>log4j-slf4j-impl</artifactId>
	        <version>${log4j2.version}</version>
        </dependency>
        <dependency>
	        <groupId>org.slf4j</groupId>
	        <artifactId>slf4j-log4j12</artifactId>
	        <version>1.7.21</version>
        </dependency>
        

參考文檔:https://logging.apache.org/log4j/2.x/manual/appenders.html(官方文檔)

 https://www.jianshu.com/p/ee075bfc7dff

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章