Log4j2 AsyncLogger с приложением прокрутки файла не показывает номер строки файла

Я использую log4j2 со следующими зависимостями:

<!-- LOG4J2 -->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.0-rc1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.0-rc1</version>
    </dependency>
    <dependency>
        <groupId>com.lmax</groupId>
        <artifactId>disruptor</artifactId>
        <version>3.0.1</version>
    </dependency>

Содержание Log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="OFF">

<Appenders>
    <Console name="CONSOLE" target="SYSTEM_OUT">
        <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n" />
    </Console>

    <!-- Generate rolling log for router with per hour interval policy -->
    <RollingFile name="ProcessorRollingFile" fileName="D:/ocsprocessor.log"
        filePattern="D:/ocsprocessor.log.%d{MM-dd-yyyy}-%i.log">
         <PatternLayout>
      <pattern>%d{ISO8601} [%t] %p %c %L - %m%n</pattern>
  </PatternLayout>
        <Policies>
            <TimeBasedTriggeringPolicy interval="1" />
        </Policies>
        <DefaultRolloverStrategy max="24" />
    </RollingFile>



    <!-- Register Async appender -->
    <Async name="AsyncRollingFile">
        <AppenderRef ref="ProcessorRollingFile" />
    </Async>
</Appenders>

<Loggers>
    <AsyncLogger name="com.tritronik.logger.log4j2" level="error"
        additivity="false">
        <AppenderRef ref="AsyncRollingFile" />
    </AsyncLogger>


</Loggers>
</Configuration>

Оказалось, что все прошло хорошо, за исключением того, что в журнале не отображается номер строки сгенерированного регистратора (%L в шаблоне).

Я гуглил и обнаружил, что для асинхронного регистратора и приложения для прокрутки файлов никто не упоминал об использовании%L, так как же тогда я смог достичь этого? Или это не поддерживает%L?

Изменить: я попытался добавить includeLocation = "true", но все еще те же результаты

2014-05-23 11:42:40,368 [threadPoolTaskExecutor-5] ERROR (AsyncLogger:) - THIS IS TEST MESSAGE FOR LOGGING TEST PURPOSE

Спасибо

1 ответ

Решение

Во-первых, удалите приложение Async appender и укажите Appender-ref объекта AsyncLogger непосредственно на ProcessorLoggingFile. Во-вторых, вы должны добавить includeLocation="true" в AsyncLogger.

Наличие асинхронного приложения в дополнение к асинхронному регистратору не помогает, и в этом случае может быть то, что мешает корректной работе includeLocation.

Другие вопросы по тегам