2016-05-13 2 views
1

В соответствии с этой ссылкой, log4j2 может заставить опрокидывание журнала из кода, начиная с версии 2.5.Как заставить RollingFile работать с CronTriggeringPolicy?

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

Вопрос: как я могу заставить это? Метод RollingFileManager имеет метод public synchronized void rollover(), который вызывается CronTriggeringPolicy.

Но как я могу создать эту политику во время выполнения?

+0

Можете ли вы добавить еще один вопрос в свой вопрос? Мне интересно, почему вы не можете просто настроить CronTriiggeringPolicy. Я также не уверен, что это может вызвать вызов метода опрокидывания. – rgoers

+0

Ну, я просто не знаю, как я могу настроить политику по своему усмотрению программным образом в текущем коде. Я хочу использовать это, чтобы заставить и запустить опрокидывание в пользовательские динамические времена. – membersound

ответ

3

Вы можете настроить RollingFileManager с помощью CronTriggeringPolicy - или любых других политик, которые вы хотите.

Чтобы заставить опрокидывание программно, если вы настроили RollingFile Appender с именем «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 будет искать LoggerContext только в ThreadLocal, чего вы обычно не хотите и можете вернуть неправильный LoggerContext. Установка его в значение false приведет к тому, что он обнаружит LoggerContext, связанный с ClassLoader. – rgoers

Смежные вопросы