2015-06-15 3 views
2

Привет Я использую slf4j над log4j2. Как изменить динамический путь журнала?Как изменить путь журнала в log4j2 во время выполнения

Мой log4j2.xml выглядит

<Properties> 
     <Property name="home">/path/logs</Property> 
    </Properties> 
    <Appenders> 
     <RollingFile name="default" fileName="${home}/error.log" 
        filePattern="..."> 
       ....... 

     </RollingFile> 
    </Appenders> 

Есть ли способ, что я могу изменить путь, где журналы будут записаны во время выполнения?

Я попытался использовать системное свойство в пути и установить его во время выполнения, но log4j2 не учитывает обновленное значение. Подход к системным свойствам -

<RollingFile name="default" fileName="${sys:home}/error.log" 
        filePattern="..."> 

(In java class: System.setProperty("home","/newPath")) 

Требуется ли реконфигурация. Я не вижу каких-либо открытых сервисов slf4j для перенастройки.

ответ

0

Используйте DOMConfigurator.doConfigure(), где второй параметр - LogManager.getLoggerRepository(). Таким образом, вы можете изменить не только путь ведения журнала, но и все остальное, включая уровни для определенных регистраторов.

Я не думаю, что вы можете перенастроить реализацию SLF4j с использованием метода «реализация-агностик». Когда мы переключили наше приложение из Log4j на Logback, мы также изменили способ перепрограммирования файла конфигурации во время выполнения. Для ведения журнала используется JoranConfigurator.doConfigure().

+0

Какие LogManager ты говоришь? Ни «org.apache.logging.log4j.LogManager», ни «org.apache.log4j.LogManager» не имеют метода «getLoggerRepository». Пожалуйста, укажите пакет –

+0

https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/LogManager.html#getLoggerRepository() – doublep

+0

О, вы используете log4j2, пропустили этот подлый 2. Никогда не задумывайтесь. – doublep

0

Единственное, что я получил, это использовать переменную контекста.

MDC.put("logLocation","path/to/log") 

В log4j2.xml

<RollingFile name="default" fileName="${ctx:logLocation}/error.log" 
       filePattern="..."> 

Однако улов, для каждого потока контекст должен иметь эту переменную (logLocation) установить

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