Как программно добавить консольные приложения (которые имеют макет шаблона) в Root Logger

Мне нужно добавить приложение консоли с макетом шаблона в Root Logger программно. Мой предыдущий код с log4j1.x имеет что-то вроде Logger.getLogger(new Appender(console,fname,patternlayout,"Specific pattern") Как преобразовать этот в log4j 2.3.2

1 ответ

Log4j 2.3.2 — старая версия, в ней отсутствуют многие новые функции, такие какConfigurationBuilderAPI.

Однако вы можете создать свой консольный аппендер и подключиться непосредственно к корневому регистратору через:

            final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
      final Logger logger = ctx.getLogger(LogManager.ROOT_LOGGER_NAME);

      final Layout<String> layout = PatternLayout.newBuilder()
            .withConfiguration(ctx.getConfiguration())
            .withPattern("some pattern")
            .build();
      final Appender appender = ConsoleAppender.newBuilder()
            .setName("some name")
            .setLayout(layout)
            .build();
      /*
       * This is simpler, but it is not API:
       *
       * logger.addAppender(appender);
       * 
       * Instead we shoud use:
       */
      ctx.getConfiguration().addLoggerAppender(logger, appender);

Примечание: это временный патч текущей конфигурации. Если конфигурация перезагружается (например, log4j2.xmlизменения файла), изменения будут потеряны.

Другие вопросы по тегам