Log4j 2 протоколирование выходного сообщения со ссылкой на номер файла - PullRequest
0 голосов
/ 20 октября 2019

Ранее я использовал log4j версии 1, где у меня был следующий файл конфигурации log4j.xml: -

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
    <param name="threshold" value="info" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level Line: %L  - %msg%n" />
    </layout>
</appender>

<category name="com.ma.dev" additivity="false">
    <priority value="INFO" />  <!-- <priority value="${myinfo}" /> --> 
    <appender-ref ref="STDOUT" />
    <appender-ref ref="LOGFILE" />
</category>


<root>
    <priority value="WARN" />
    <appender-ref ref="UNMAPFILE" />
</root>

</log4j:configuration>

Эта конфигурация генерирует следующий вывод журнала, где у меня есть ссылка на строку журнала: -

enter image description here

Я пытался получить аналогичный вывод журнала для log4j версии 2 со следующим файлом конфигурации: -

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Properties>
        <Property name="priorityLevel">info</Property>
    </Properties>

    <Appenders>
        <Console name="myConsole" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%thread] %-5level Line: %L  - %msg%n"/>
        </Console>
    </Appenders>

    <Loggers>
        <Root level="${priorityLevel}">
            <AppenderRef ref="myConsole"/>
        </Root>
    </Loggers>
</Configuration> 

Я получил вывод как: -

enter image description here

Нет ссылки. Как я могу иметь ссылку в Log4j версии 2?

1 Ответ

1 голос
/ 20 октября 2019

В Log4j1 %l означало «местоположение», поэтому, где у вас есть %level, вы получаете местоположение регистратора + уровень.

В Log4j2 местоположение изменилось на %c, в котором выводится имярегистратор (который является именем класса, если вы правильно создаете экземпляры своих регистраторов с помощью LoggerFactory.getLogger(Foo.class), где foo - это имя вашего класса.

%level печатает уровень ведения журнала, поэтому вам потребуетсяизмените это значение на %c в вашей конфигурации PatternLayout, чтобы получить тот же вывод, что и при использовании Log4j1:

<PatternLayout pattern="%d{HH:mm:ss.SSS} [%thread] %c %-5level Line: %L  - %msg%n"/>

Проверьте страницу Layout из документации log4j2 и прокрутите вниз до PatternLayout, чтобы узнать больше https://logging.apache.org/log4j/2.x/manual/layouts.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...