log4j2 логи из неизвестного источника - PullRequest
0 голосов
/ 06 июля 2018

Я пытаюсь научиться ведению журнала (log4j2)

Это мой XML-файл конфигурации log4j2

log4j2_config_6_appenders.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
        <Console name="Console1_sout" target="SYSTEM_OUT">
            <PatternLayout pattern="[Console1_sout] %d{yyyy-MMM-dd HH:mm:ss a} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
        <Console name="Console2_serr" target="SYSTEM_ERR">
            <PatternLayout pattern="[Console2_serr] %d{yyyy-MMM-dd HH:mm:ss a} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Logger name="logger1_sout" level="trace">
            <AppenderRef ref="Console1_sout"/>
        </Logger>
        <Logger name="logger2_serr" level="trace">
            <AppenderRef ref="Console2_serr"/>
        </Logger>
    </Loggers>
</Configuration>

Это мой тест

    @Test
    public void test_consoleAppender() {
        setLog4j2ConfigFile("log4j2_config_6_appenders.xml");
        final Logger logger1_sout = LogManager.getLogger("logger1_sout");
        final Logger logger2_serr = LogManager.getLogger("logger2_serr");
        final Logger[] loggers = new Logger[]{logger1_sout, logger2_serr};
        for (Logger logger : loggers) {
            logger.trace("This is a trace message");
            logger.debug("This is a debug message");
            logger.info("This is an info message");
            logger.warn("This is a warning message");
            logger.error("This is an error message");
            logger.fatal("This is a fatal message");
            System.out.println();
        }
    }

Это вывод

[Console1_sout] 2018-Jul-06 16:12:49 PM [main] TRACE logger1_sout - This is a trace message
16:12:49.545 [main] TRACE logger1_sout - This is a trace message
[Console1_sout] 2018-Jul-06 16:12:49 PM [main] DEBUG logger1_sout - This is a debug message
16:12:49.547 [main] DEBUG logger1_sout - This is a debug message
[Console1_sout] 2018-Jul-06 16:12:49 PM [main] INFO  logger1_sout - This is an info message
16:12:49.547 [main] INFO  logger1_sout - This is an info message
[Console1_sout] 2018-Jul-06 16:12:49 PM [main] WARN  logger1_sout - This is a warning message
16:12:49.547 [main] WARN  logger1_sout - This is a warning message
[Console1_sout] 2018-Jul-06 16:12:49 PM [main] ERROR logger1_sout - This is an error message
16:12:49.547 [main] ERROR logger1_sout - This is an error message
[Console1_sout] 2018-Jul-06 16:12:49 PM [main] FATAL logger1_sout - This is a fatal message
16:12:49.547 [main] FATAL logger1_sout - This is a fatal message

16:12:49.548 [main] TRACE logger2_serr - This is a trace message
16:12:49.548 [main] DEBUG logger2_serr - This is a debug message
16:12:49.548 [main] INFO  logger2_serr - This is an info message
16:12:49.548 [main] WARN  logger2_serr - This is a warning message
16:12:49.548 [main] ERROR logger2_serr - This is an error message
16:12:49.548 [main] FATAL logger2_serr - This is a fatal message


[Console2_serr] 2018-Jul-06 16:12:49 PM [main] TRACE logger2_serr - This is a trace message
[Console2_serr] 2018-Jul-06 16:12:49 PM [main] DEBUG logger2_serr - This is a debug message
[Console2_serr] 2018-Jul-06 16:12:49 PM [main] INFO  logger2_serr - This is an info message
[Console2_serr] 2018-Jul-06 16:12:49 PM [main] WARN  logger2_serr - This is a warning message
[Console2_serr] 2018-Jul-06 16:12:49 PM [main] ERROR logger2_serr - This is an error message
[Console2_serr] 2018-Jul-06 16:12:49 PM [main] FATAL logger2_serr - This is a fatal message

Вопрос

Почему существуют журналы, которые не содержат ни "[Console2_serr]", ни "[Console1_sout]"?

1 Ответ

0 голосов
/ 06 июля 2018

Вероятно, из-за отсутствия аддитивности и конфигурации корневого регистратора.

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
        <Console name="Console1_sout" target="SYSTEM_OUT">
            <PatternLayout pattern="[Console1_sout] %d{yyyy-MMM-dd HH:mm:ss a} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
        <Console name="Console2_serr" target="SYSTEM_ERR">
            <PatternLayout pattern="[Console2_serr] %d{yyyy-MMM-dd HH:mm:ss a} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Logger name="logger1_sout" level="trace" additivity="false">
            <AppenderRef ref="Console1_sout"/>
        </Logger>
        <Logger name="logger2_serr" level="trace" additivity="false">
            <AppenderRef ref="Console2_serr"/>
        </Logger>
         <Root level="trace" additivity="false">
              <AppenderRef ref="Console1_sout"/>
              <AppenderRef ref="Console2_serr"/>
         </Root>
    </Loggers>
</Configuration>

Попробуйте что-нибудь подобное. Аддитивность позволяет вам использовать строку журнала в первый раз и предотвратить перехват другим регистратором.

...