Как добавить программные приложения Log4J2 во время выполнения программно?
Можно ли программным образом добавлять программные приложения Log4J2 с использованием спецификаций из конфигурации XML?
Я планирую определить все это в log4j2.xml, а затем выбрать appenders ситуативно, как это (не будет компилироваться):
if (arg[0].equals("log") ) {
Logger.getLogger("loggerNameFromXMLConfig").addAppender("appenderNameFromXMLConfig");
} else {
//...
}
Ответы
Ответ 1
Изменить: для новейших версий log4j2 см. fooobar.com/questions/201324/....
У меня создается впечатление, что они не хотят, чтобы вы это делали, но это работает для меня:
if (arg[0].equals("log") ) {
org.apache.logging.log4j.Logger logger
= org.apache.logging.log4j.LogManager.getLogger("loggerNameFromXMLConfig");
org.apache.logging.log4j.core.Logger coreLogger
= (org.apache.logging.log4j.core.Logger)logger;
org.apache.logging.log4j.core.LoggerContext context
= (org.apache.logging.log4j.core.LoggerContext)coreLogger.getContext();
org.apache.logging.log4j.core.config.BaseConfiguration configuration
= (org.apache.logging.log4j.core.config.BaseConfiguration)context.getConfiguration();
coreLogger.addAppender(configuration.getAppender("appenderNameFromXMLConfig"));
} else {
//...
}
Ответ 2
Было несколько запросов на поддержку лучшей программной конфигурации для Log4j 2. Извините, это заняло так много времени. Начиная с Log4j 2.4, API был добавлен в log4j-core для облегчения программной конфигурации.
Новый API ConfigurationBuilder
позволяет пользователям создавать определения компонентов. С помощью этого API нет необходимости работать непосредственно с реальными объектами конфигурации (такими как LoggerConfig и FileAppender), которые требуют большого количества знаний о том, как Log4j работает под капотом. Определения компонентов добавляются в ConfigurationBuilder, и как только все определения будут собраны, будут созданы все фактические объекты конфигурации (такие как Loggers и Appenders). Он немного похож на синтаксис конфигурации XML, за исключением того, что вы пишете Java-код.
Обратите внимание, что новый API ConfigurationBuilder
позволяет коду пользователя создавать новую конфигурацию или полностью заменять существующую конфигурацию. Если ваш вариант использования отличается, и вы хотите программно изменить (а не заменить) существующую конфигурацию после запуска Log4j, вам необходимо будет работать с реальными объектами конфигурации. В этом случае см. Раздел "Программируемое изменение текущей конфигурации после инициализации" в руководстве.
Ответ 3
Я не знаю, полезно ли это:
Appender можно добавить в Logger, вызвав метод addLoggerAppender текущей конфигурации.
ссылка: http://logging.apache.org/log4j/2.x/manual/architecture.html