log4j2 檔案滾動擴充套件(基於行和時間的滾動)

2021-06-14 05:12:19 字數 2868 閱讀 7350

目標:實現基於行和時間間隔的檔案滾動

注:不是純粹的行,而是log的次數,如果log一次是一行,就是行數(我log一次就是一行)。

例如:單個檔案超過10行滾動檔案,如果超過10秒還不到10行,也滾動檔案。

mysql預設的組合策略達不到這個目標,他是兩種策略的「或」,單一的行數到達限制,或者單一的時間間隔到達限制,都會滾動。在滾動後,兩個策略單獨重置,而不是一起都重置。

實現方法

通過實現乙個triggeringplolicy即可達到這個目標。這個介面的istriggeringevent方法來控制滾動,如果該方法返回true,那麼就滾動。

這裡實現了乙個linebasedtriggeringpolicy ,需要實現triggeringplolicy,和乙個工廠方法。該類和工廠方法都需要用annotation標註。

上層對istriggeringevent的呼叫時同步的,我們這裡不需額外的同步。

配置關鍵點解釋:

1.configuration的packages:由於是基於annotation開發,所以log4j需要掃瞄包,找到它的元件,如果沒有這個屬性,會找不到我們定義的policy。

2. filepattern的日期格式:如果日誌錄入較快,檔案滾動比較頻繁,檔名重複的機率很大,這時是通過新增序號(pattern中的i)來解決的,rollingstrategy的max屬性指示序號最大有幾個,如果超過了最大個數,會再從頭滾動,這樣,我們前面的日誌被覆蓋,造成日誌丟失。如果採用毫秒級的檔名,重複機率大大降低。(另外如果max的只很大,滾動會變得很慢,比如10萬,我沒有深究為什麼。)

3. linebasedtriggeringpolicy 就是我們的滾動策略。這裡配置的是最多10行,最多10秒,就滾動。

4.類、工廠方法、工廠方法上的引數,都要有相應的annotation。

5.configuration的statu屬性:配置成debug可以檢視log4j的裝配過程,設定成off,即可關閉狀態日誌。

配置檔案

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

%m%n

自定義triggeringpolicy

import org.apache.logging.log4j.logger;

import org.apache.logging.log4j.core.logevent;

import org.apache.logging.log4j.core.config.plugins.plugin;

import org.apache.logging.log4j.core.config.plugins.pluginattr;

import org.apache.logging.log4j.core.config.plugins.pluginfactory;

import org.apache.logging.log4j.status.statuslogger;

/** * zhmt

*/@plugin(name = "linebasedtriggeringpolicy", type = "core", printobject = true)

public class linebasedtriggeringpolicy implements triggeringpolicy

/*** constructs a new instance.

* * @param maxfilesize

* rollover threshold size in bytes.

*/protected linebasedtriggeringpolicy(final long maxfilesize,

int maxelapsedtime)

/*** initialize the triggeringpolicy.

* * @param manager

* the rollingfilemanager.

*/public void initialize(final rollingfilemanager manager)

/*** returns true if a rollover should occur.

* * @param event

* a reference to the currently event.

* @return true if a rollover should take place, false otherwise.

*/public boolean istriggeringevent(final logevent event)

} if (ret)

return ret;

} @override

public string tostring()

/*** create a sizebasedtriggeringpolicy.

* * @param size

* the size of the file before rollover is required.

* @return a sizebasedtriggeringpolicy.

*/@pluginfactory

public static linebasedtriggeringpolicy createpolicy(@pluginattr("size")

final string size, @pluginattr("maxelapsedtime")

final string maxelapsedtime) }

log4j2配置檔案詳解

log4j 2.x版本不再支援像1.x中的.properties字尾的檔案配置方式,2.x版本配置檔案字尾名只能為 xml json 或者 jsn 系統選擇配置檔案的優先順序 從先到後 如下 1 classpath下的名為log4j2 test.json 或者log4j2 test.jsn的檔案.2...

log4j2 配置檔案解讀

日誌介面 slf4j slf4j是對所有日誌框架制定的一種規範 標準 介面,並不是乙個框架的具體的實現,因為介面並不能獨立使用,需要和具體的日誌框架實現配合使用,比如log4j logback等日誌框架。常用的日誌框架有log4j logback log4j2,log4j是apache實現的乙個開源...

log4j2配置檔案的故事

我們來詳細介紹一下 status 這是日誌自身的日誌。一般寫off,代表關閉不顯示。八個日誌級別以及優先順序排序 off 關閉 fatal 致命的 error warn info debug trace 堆疊 monitorinterval 重新整理此檔案的時間間隔,保證修改後的檔案及時生效。很顯然...