2015-10-05 6 views
1

Я хотел бы проверить следующий фрагмент кода, в котором я застрял от перехода с LOG4J1.X на LOG4J2.LOG4J1.x to LOG4J2

File f = new File(fullFilePath); 
Enumeration apps = logger.getAllAppenders(); 
if(!f.exists() || !apps.hasMoreElements()) 
{ 
logger.removeAllAppenders(); 
appender = new FileAppender(); 
appender.setName(fileName); 
logger.addAppender(appender); 
logger.setLevel(Level.toLevel(level)); 
} 

Я мог бы преобразовать остальную часть кода успешно log4j2, однако removeAllAppenders, getAllAppenders, addAppender, setLevel функции недоступны в log4j2. Следовательно, как я могу их заменить?

+0

См. Руководство по миграции log4j2. https://logging.apache.org/log4j/2.x/manual/migration.html – ares

+0

Спасибо, но эта ссылка, которую я посетил, не отвечает на мой вопрос - @ares :) Я застрял в той части, где я не могу заменить «getAllAppenders» и т. д. –

ответ

1

В Log4j2 Регистраторы не имеют прикрепленных к ним приложений или фильтров. Вместо этого они связаны с LoggerConfig. У LoggerConfig есть метод setLevel, но обновление его фактически не будет изменять уровень любого Loggers, который его использует. Для этого вам нужно вызвать метод updateLoggers для LoggerContext.

LoggerContext loggerContext = (LoggerContext) LogManager.getContext(false); 
Configuration config = loggerContext.getConfiguration(); 
// Note that the next method gets the LoggerConfig that best matches the 
// Logger name. If no logger 
LoggerConfig loggerConfig = config.getLoggerConfig(loggerName); 
Configurator.setLevel(loggerConfig, newLevel); 
loggerContext.updateLoggers(); 

Что касается Appenders, то Appenders не привязаны напрямую к LoggerConfig. Вместо этого они завертываются AppenderControl. Вы можете получить этот список Appenders, прикрепленный к LoggerConfig, вызвав getAppenderRefs. Затем вы можете удалить каждый append один за другим.

Однако делать это не рекомендуется. Добавление и удаление приложений, подобных этому, действительно существует только для поддержки модульного тестирования Log4j. Проблема заключается в том, что, пока вы это делаете, система все еще регистрируется, и вы попадете в состояние, в котором события журнала потеряны, потому что никакие приложения не настроены. Рекомендуемый подход в Log4j заключается в создании новой конфигурации, а затем

Configurator.initialize(Configuration);