[英]Default log4j policy
我試圖了解TimeBasedTriggeringPolicy
如何確定何時創建/附加/刪除日志文件。
對於以下配置:
<RollingRandomAccessFile name="test" fileName="/logs/test.log" filePattern="/logs/test.log.%d{yyyy-MM-dd}"
<Policies>
<TimeBasedTriggeringPolicy />
</Policies>
</RollingRandomAccessFile>
這個對嗎:
%d
參數表示每天都會創建一個附加當前{yyyy-MM-dd}
的新日志文件 test.log? 以前版本的test.log 沒有被刪除? 如果我將 %d 更改為 %M 是否應該每月創建一個新文件?
為了確保只有當天的日志文件可用並刪除其他日志文件,應將策略修改為:
<RollingRandomAccessFile name="test" fileName="/logs/test.log" filePattern="/logs/test.log.%d{yyyy-MM-dd}"
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
</Policies>
</RollingRandomAccessFile>
?
我試圖了解 TimeBasedTriggeringPolicy 如何確定何時創建/附加/刪除日志文件。
TimeBasedTriggeringPolicy
控制下一次翻轉發生的時間。 下一次翻轉時間根據提供的日期單位確定。 {yyyy-MM-dd}
表示第二天。 在沒有其他觸發策略的情況下,所有日志都將附加到當天文件。
DefaultRolloverStrategy
控制何時根據文件模式歸檔/刪除/創建日志文件。 第二天到來時,將創建具有當前日期的新文件,並將所有日志附加到新文件中。 根據翻轉策略配置,可以保留或刪除前一天的文件。 max
和min
屬性控制文件模式中帶有%i
說明符的文件數,以維護文件計數器和fileIndex
以控制文件重命名。
原來的
%d 參數表示每天都會創建一個附加當前 {yyyy-MM-dd} 的新日志文件 test.log? 以前版本的test.log 沒有被刪除? 如果我將 %d 更改為 %M 是否應該每月創建一個新文件?
%d
是轉換說明符 - Log4j 2 具有用於不同轉換說明符的轉換器。 %d
引用日期並允許您發送日期格式。 日期時間單元本身控制何時發生翻轉。 %m
在 log4j2 中無法識別,您可以使用%d{yyyy-MM}
每月創建文件。 您可以使用modulate
標志在間隔邊界處翻轉文件 - 月初。
為了確保只有當天的日志文件可用並刪除其他日志文件,應將策略修改為:
<RollingRandomAccessFile name="test" fileName="/logs/test.log" filePattern="/logs/test.log.%d{yyyy-MM-dd}" TimeBasedTriggeringPolicy interval="1"/> /RollingRandomAccessFile>?
是的,這是正確的。 interval="1"
是默認值,因此可以刪除。 當您未指定任何翻轉策略時,將應用DefaultRollOverStrategy
。 默認翻轉策略將使用提供的文件名模式進行翻轉。 由於這是每天( -dd
),它將每天滾動文件,同一天沒有中間文件。
從文檔-
RollingRandomAccessFileAppender 需要 TriggeringPolicy 和 RolloverStrategy。 觸發策略確定是否應執行翻轉,而 RolloverStrategy 定義應如何完成翻轉。 如果沒有配置 RolloverStrategy,RollingRandomAccessFileAppender 將使用 DefaultRolloverStrategy
您可以使用適當的觸發策略和翻轉策略進一步自定義。
其中,當您配置RollingFileAppender
時,您需要為filePattern
參數提供一個值。
此配置參數將指示生成的歸檔日志文件的文件名模式。
此模式的格式取決於RollingFileAppender
使用的RolloverPolicy
。
默認情況下,Log4j 2 將使用Default Rollover Strategy 。
此策略將允許您基於數字索引、通過指示%i
模式標記或按日期/時間、通過在您的用例中指示%d
模式標記來翻轉日志。 您也可以將數字索引添加到日期/時間模式:在這種情況下,數字索引將遞增,直到日期/時間模式的結果發生變化。
如果您定義日期/時間模式,則需要通過傳遞SimpleDateFormat
兼容模式(在您的示例中yyyy-MM-dd
)來提供執行翻轉的基本粒度。
我說的是基本粒度,而不僅僅是粒度,因為實際的日志翻轉時刻將取決於您如何配置與RollingFileAppender
關聯的觸發策略。
在TimeBasedTriggeringPolicy
的情況下,您可以配置幾個參數來確定日志翻轉行為,主要是兩個。
首先,您有interval
參數:它將根據日期模式中最具體的時間單位指示翻轉應該發生的頻率。 即,如果像您的示例一樣,您將天配置為最具體的單位並為interval
參數提供值3
(默認為1
),則翻轉將每3
天發生一次。
其次,您可以激活(默認為false
) modulate
參數。 此參數指示是否應調整間隔以使下一次翻轉發生在間隔邊界上。 Log4j2 文檔提供了一個清晰的示例:
例如,如果項目是小時,當前時間是凌晨 3 點,間隔是 4,那么第一次翻轉將發生在凌晨 4 點,然后下一個翻轉將發生在早上 8 點、中午、下午 4 點等。
在您的用例中會發生類似的事情,但語義是一年中的一天。
有關詳細信息,請參閱PatternProcessor
class 的源代碼。 還要注意increment
方法。
關於日志刪除,據我所知,如果您在模式中使用數字索引(通過調整fileIndex
, min
end max
參數),默認翻轉策略只會刪除舊文件,但是,由於 Log4j 2.5,您可以使用delete發生日志翻轉時執行清理基於日期/時間的日志的操作(在 Log4j 中,將操作視為一種鈎子)。
例如,如果您只需要將日志文件保留30
天,您可以使用以下內容配置此功能:
<RollingRandomAccessFile name="test" fileName="/logs/test.log" filePattern="/logs/test.log.%d{yyyy-MM-dd}">
<Policies>
<TimeBasedTriggeringPolicy/>
</Policies>
<DefaultRolloverStrategy>
<Delete basePath="/logs">
<IfFileName glob="test.log.*" />
<IfLastModified age="30d" />
</Delete>
</DefaultRolloverStrategy>
</RollingRandomAccessFile>
請務必注意,刪除過程可能會影響任何文件,而不僅僅是日志文件:請務必參數化執行刪除過程的正確路徑,並在使用此功能時提供正確的glob
模式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.