2016-05-13 58 views
1

根據此鏈接,log4j2可以強制日誌文件翻轉代碼,因爲版本爲2.5如何用CronTriggeringPolicy強制RollingFile運行時運行?

https://issues.apache.org/jira/browse/LOG4J2-89

的問題是:我怎麼能強制呢? RollingFileManager有一個public synchronized void rollover()方法,由CronTriggeringPolicy調用。

但是我怎麼能在運行時創建該策略?

+0

你可以添加更多的問題嗎?我想知道爲什麼你不能只配置CronTriiggeringPolicy。我也不確定能夠調用翻轉方法與此有什麼關係。 – rgoers

+0

嗯,我只是不知道如何在運行代碼中以編程方式配置策略。我想用它來強制並在自定義動態時間觸發翻轉。 – membersound

回答

3

您可以使用CronTriggeringPolicy配置RollingFileManager - 或者您需要的任何其他策略。

要強制側翻編程,假設你已經配置了RollingFile追加程序名爲「RollingFile」你會做:

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

LoggerContext lc = (LoggerContext)LogManager.getContext(false); 
Appender app = lc.getAppender("RollingFile"); 
if (app instanceof RollingFileAppender) { 
    ((RollingFileAppender)app).getManager().rollover(); 
} 

的CronTriggeringPolicy是不是真的設計爲具有動態更新的時間表。

+0

謝謝。 'getContext(false/true)'有什麼區別? – membersound

+1

在http://logging.apache.org/log4j/2.x/manual/extending.html中有關於ContextSelectors的討論。其中一些使用ThreadLocal作爲快速查找LoggerContext的方法。 ClassLoaderContextSelector可以支持ThreadLocal,但通常不會使用它。如果將該值設置爲true,那麼ClassLoaderContextSelector將僅查找ThreadLocal中的LoggerContext,而這通常不是您想要的,並且可能會返回不正確的LoggerContext。將其設置爲false將導致它找到與ClassLoader關聯的LoggerContext。 – rgoers

相關問題