Я пытаюсь создать регистратор log4j2 программно, используя API ConfigurationBuilder в приложении весенней загрузки. Но код, кажется, не работает должным образом.
Ниже приведен фрагмент кода, который я пытаюсь достичь:
String loggerName = "testLogger";
final ConfigurationBuilder<BuiltConfiguration> builder = ConfigurationBuilderFactory.newConfigurationBuilder();
final LoggerComponentBuilder loggerComp = builder.newLogger(loggerName, Level.ALL).addAttribute("additivity",
false);
builder.add(loggerComp);
LoggerContext ctx = Configurator.initialize(builder.build());
final Configuration config = ctx.getConfiguration();
ctx.start();
ctx.updateLoggers();
System.out.println(ctx.hasLogger(loggerName));
Я ожидал, что регистратор будет создан в LoggerContext и протестирует егоиспользуя
ctx.hasLogger(loggerName)
Он должен вернуть мне true. Но он возвращает false.
Что может быть возможным в приведенном выше коде.
При некоторой отладке я обнаружил, что ctx.hasLogger входит в loggerRegistry, чтобы найти, существует ли там регистратор с ИМЯ, предоставленным в качестве аргумента, и он не нашел его, поэтому возвращает false. Я думаю, что пользовательский регистратор никогда не создается, поэтому ctx.hasLogger () возвращает false.
Кроме того, я явно не использовал какой-либо файл конфигурации для log4j2. Когда приложение весенней загрузки запускается, оно учитывает собственный log4j2.xml, который выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Properties>
<Property name="LOG_EXCEPTION_CONVERSION_WORD">%xwEx</Property>
<Property name="LOG_LEVEL_PATTERN">%5p</Property>
<Property name="LOG_DATEFORMAT_PATTERN">yyyy-MM-dd
HH:mm:ss.SSS
</Property>
<Property name="CONSOLE_LOG_PATTERN">%clr{%d{${LOG_DATEFORMAT_PATTERN}}}{faint} %clr{${LOG_LEVEL_PATTERN}} %clr{%pid}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
<Property name="FILE_LOG_PATTERN">%d{${LOG_DATEFORMAT_PATTERN}} ${LOG_LEVEL_PATTERN} %pid --- [%t] %-40.40c{1.} : %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
</Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT" follow="true">
<PatternLayout pattern="${sys:CONSOLE_LOG_PATTERN}" />
</Console>
</Appenders>
<Loggers>
<Logger name="org.apache.catalina.startup.DigesterFactory" level="error" />
<Logger name="org.apache.catalina.util.LifecycleBase" level="error" />
<Logger name="org.apache.coyote.http11.Http11NioProtocol" level="warn" />
<logger name="org.apache.sshd.common.util.SecurityUtils" level="warn"/>
<Logger name="org.apache.tomcat.util.net.NioSelectorPool" level="warn" />
<Logger name="org.eclipse.jetty.util.component.AbstractLifeCycle" level="error" />
<Logger name="org.hibernate.validator.internal.util.Version" level="warn" />
<logger name="org.springframework.boot.actuate.endpoint.jmx" level="warn"/>
<Root level="info">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>