вернуться к переносу асинхронного ведения журнала log4j2

Мне нужно выбрать структуру ведения журнала для замены log4j. Первоначально я выбрал slf4j + logback для ведения журнала и написал следующую конфигурацию, которая выводит журнал приложений и журналы apache cxf в отдельные файлы и выводит журналы spring/hibernate на консоль:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <Pattern>.%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg %n
        </Pattern>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>TRACE</level>
    </filter>
</appender>

<appender name="dailyRollingFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <FileNamePattern>D:\\MYDIR\\logs\\app_logback.%d{yyyy-MM-dd}.log</FileNamePattern>
        <maxHistory>30</maxHistory>         
    </rollingPolicy>

    <encoder>
        <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg %n</Pattern>
    </encoder>      
</appender>

<appender name="minuteRollingFileAppenderCxf" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <FileNamePattern>D:\\MYDIR\\logs\\app_logback_cxf.%d{yyyy-MM-dd_HH-mm}.log</FileNamePattern>
        <maxHistory>30</maxHistory>         
    </rollingPolicy>

    <encoder>
        <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg %n</Pattern>
    </encoder>      
</appender>

<logger name="com.mycustomcode" additivity="false">
    <level value="DEBUG" />
    <appender-ref ref="dailyRollingFileAppender"/>
</logger>

<logger name="org.apache" additivity="false">
    <level value="INFO" />
    <appender-ref ref="minuteRollingFileAppenderCxf"/>
</logger>

<root>
    <level value="INFO" />
    <appender-ref ref="consoleAppender" />
</root>
</configuration>

Однако я узнал об асинхронном ведении журнала в log4j2 и хочу реализовать асинхронное ведение журнала с использованием log4j2 в своей настройке, для которой я написал следующую конфигурацию:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console">
  <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>

<RandomAccessFile name="RandomAccessFile" fileName="D:\\MYDIR\\logs\\app_log4j2.log" immediateFlush="false" append="false">
  <PatternLayout>
    <Pattern>%d %p %c{1.} [%t] %m %ex%n</Pattern>
  </PatternLayout>
</RandomAccessFile>

<RandomAccessFile name="RandomAccessFile2" fileName="D:\\MYDIR\\logs\\app_log4j2_cxf.log" immediateFlush="false" append="false">
  <PatternLayout>
    <Pattern>%d %p %c{1.} [%t] %m %ex%n</Pattern>
  </PatternLayout>
</RandomAccessFile>
</Appenders>

<Loggers>
<AsyncLogger name="com.mycustomcode" level="debug" includeLocation="true" additivity="false">
  <AppenderRef ref="RandomAccessFile"/>
</AsyncLogger>

<AsyncLogger name="org.apache" level="debug" includeLocation="true" additivity="false">
  <AppenderRef ref="RandomAccessFile2"/>
</AsyncLogger>

<Root level="debug" includeLocation="false">
  <AppenderRef ref="Console"/>
</Root>
</Loggers>

</Configuration>

конфигурация log4j2 работает, но она правильно печатает журналы для «com.mycustomcode» в своем файле (app_log4j2.log). Для «org.apache» в файле app_log4j2_cxf.log ничего не печатается — на самом деле он пуст, и его журнал выводится на консоль сервера.

Может кто-нибудь указать, что я делаю неправильно? Спасибо


person Alok Sharma    schedule 03.06.2015    source источник


Ответы (2)


logback также имеет асинхронную поддержку. Проверить асинкаппендер

http://logback.qos.ch/manual/appenders.html

person user5121658    schedule 16.07.2015

Использует ли ваш код, использующий эту конфигурацию, регистратор с именем, начинающимся с «org.apache»? В противном случае вы не увидите никаких выходных данных для этого регистратора.

Чтобы убедиться в этом, используйте приведенную выше конфигурацию с этим кодом:

Logger logger = LogManager.getLogger("org.apache.anything");
logger.debug("test");
person Remko Popma    schedule 24.08.2015