Почему API ConfigurationBuilder не создает Logger? - PullRequest
1 голос
/ 23 декабря 2019

Я пытаюсь создать регистратор 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>
...