log4j сбрасывает свойства обратно в исходное состояние, как в файле log4j.properties - PullRequest
2 голосов
/ 24 октября 2011

В моем приложении я определил log4j.properites следующим образом

log4j.appender.email=org.apache.log4j.net.SMTPAppender
log4j.appender.email.Subject=email Notification

, позже в программе я динамически меняю тему на

Properties prop = new Properties();
prop.setProperty("log4j.appender.email.Subject", "Test Completed");

После того, как я использую эту переменную, яхочу сбросить это обратно на оригинал в файле.поэтому я сделал это

LogManager.resetConfiguration();
PropertyConfigurator.configure(prop);

Но позже в коде всякий раз, когда я использую это свойство субъекта, оно присваивает ему значение «Тест завершен».Любое предложение для сброса конфигурации с благодарностью.Спасибо

Ответы [ 2 ]

5 голосов
/ 25 октября 2011

Как указано в моих комментариях выше, оба

LogManager.resetConfiguration();
PropertyConfigurator.configure(prop);

не перенастраивать уже существующие экземпляры Logger, чтобы они все еще использовали ваш старый EmailAppender. Для того, чтобы изменения вступили в силу, вы должны заново создать регистраторы. Если это невозможно (например, ваши регистраторы являются статическими конечными полями), вы можете создать простую оболочку Logger, которая зарегистрирует себя в каком-либо прослушивателе, который уведомит об изменении конфигурации, чтобы оболочка могла создать новый экземпляр регистратора

0 голосов
/ 23 мая 2017

Это частичный ответ (я знаю); Но вы можете сделать сброс без явного LogManager.resetConfiguration();

Сброс иерархии

Иерархия будет сброшена перед настройкой, когда в файле свойств присутствует log4j.reset = true.

https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PropertyConfigurator.html

...