log4j2定期生成和刪除過(guò)期日志文件的配置

如果你做過(guò)類(lèi)似的資料搜索工作, 你會(huì)容易找到相關(guān)的配置方法. 然而, 但是, 大部分都是你抄我, 我抄你的, 并沒(méi)有仔細(xì)檢測(cè), 就寫(xiě)的教程.
其中重要的就是刪除過(guò)期日志文件的配置. 很多都說(shuō)通過(guò)max=數(shù)字控制.
這是扯淡, 這個(gè)只是控制某時(shí)間段內(nèi)(根據(jù)配置不同)文件的數(shù)目.
它并不會(huì)關(guān)心你的目錄下一共有多少個(gè)日志文件了. 可想而知, 這樣隨著時(shí)間的推移, 雖然每個(gè)時(shí)間區(qū)間內(nèi)日志數(shù)目控制在范圍內(nèi), 但是, 總?cè)罩疚募€(gè)數(shù), 依然日益膨脹.

log4j2.xml

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

<Configuration status="WARN" monitorInterval="300">   <!-- debug="true" xmlns:log4j="http://jakarta.apache.org/log4j/"-->
    <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小時(shí)/分/... 生成一個(gè)文件, 時(shí)間依據(jù)filePattern的配置-->
                <SizeBasedTriggeringPolicy size="5 MB"/>
            </Policies>
            <DefaultRolloverStrategy max="30">
                <Delete basePath="${LOG_HOME}/$${date:yyyy-MM}/" maxDepth="2">
                    <IfFileName glob="*.log" />
                    <!--!Note: 這里的age必須和filePattern協(xié)調(diào), 后者是精確到HH, 這里就要寫(xiě)成xH, xd就不起作用
                    另外, 數(shù)字最好>2, 否則可能造成刪除的時(shí)候, 最近的文件還處于被占用狀態(tài),導(dǎo)致刪除不成功!-->
                    <!--7天-->
                    <IfLastModified age="168H" />
                </Delete>
            </DefaultRolloverStrategy>
        </RollingRandomAccessFile>
    </Appenders>

    <Loggers>
        <!--過(guò)濾掉spring和mybatis的一些無(wú)用的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定義的日志文件后綴精確的時(shí)間決定了定期生成日志文件. 精確到dd, 即%d{yyyy-MM-dd}, 則會(huì)每天生成一個(gè)文件, 精確到HH, 則會(huì)每時(shí)生成一個(gè)文件, ...
  • Delete標(biāo)簽內(nèi)決定了刪除過(guò)期文件的規(guī)則. 需要注意這里的IfLastModified .age要和filePattern精確的時(shí)間一致, 否則貌似無(wú)效.
    我這里日志文件會(huì)按日期放入子文件夾內(nèi), 所以要想統(tǒng)計(jì)總數(shù), 需要遞歸統(tǒng)計(jì), 故設(shè)置maxDepth=2.

依賴(lài)jar包

我這里的依賴(lài)可以實(shí)現(xiàn), 將sfl4j類(lèi)的日志委托給log4j2實(shí)現(xiàn). 所以項(xiàng)目中可以同時(shí)使用sfl4jlog4j類(lèi)的日志系統(tǒng).

   <properties>
        <log4j2.version>2.8</log4j2.version>
  </properties>


  <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
        </dependency>
        <!--log4j2-->
        <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.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
        <!--//log4j2-->
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ORA-00001: 違反唯一約束條件 (.) 錯(cuò)誤說(shuō)明:當(dāng)在唯一索引所對(duì)應(yīng)的列上鍵入重復(fù)值時(shí),會(huì)觸發(fā)此異常。 O...
    我想起個(gè)好名字閱讀 5,918評(píng)論 0 9
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,502評(píng)論 19 139
  • feisky云計(jì)算、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 4,270評(píng)論 0 5
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,253評(píng)論 6 342
  • 原創(chuàng):凡人隨筆 人的內(nèi)心世界可以有山河百川,也必須有螻蟻螢蟲(chóng) 人唯有主動(dòng)感知體會(huì)獨(dú)處,才是自己與自己能遇見(jiàn)唯一的圣...
    考拉Boy閱讀 958評(píng)論 2 26

友情鏈接更多精彩內(nèi)容