Подтвердить что ты не робот

Как добавить программные приложения Log4J2 во время выполнения программно?

Можно ли программным образом добавлять программные приложения Log4J2 с использованием спецификаций из конфигурации XML?

Я планирую определить все это в log4j2.xml, а затем выбрать appenders ситуативно, как это (не будет компилироваться):

if (arg[0].equals("log") ) {
    Logger.getLogger("loggerNameFromXMLConfig").addAppender("appenderNameFromXMLConfig");
} else {
    //...
}
4b9b3361

Ответ 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, вам необходимо будет работать с реальными объектами конфигурации. В этом случае см. Раздел "Программируемое изменение текущей конфигурации после инициализации" в руководстве.