Как программно добавить консольные приложения (которые имеют макет шаблона) в Root Logger
Мне нужно добавить приложение консоли с макетом шаблона в Root Logger программно. Мой предыдущий код с log4j1.x имеет что-то вроде Logger.getLogger(new Appender(console,fname,patternlayout,"Specific pattern") Как преобразовать этот в log4j 2.3.2
1 ответ
Log4j 2.3.2 — старая версия, в ней отсутствуют многие новые функции, такие какConfigurationBuilder
API.
Однако вы можете создать свой консольный аппендер и подключиться непосредственно к корневому регистратору через:
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
изменения файла), изменения будут потеряны.