logback към log4j2 асинхронна миграция на регистриране

Трябва да избера рамка за регистриране, която да замени log4j. Първоначално избрах slf4j + logback за регистриране и написах следната конфигурация, която извежда регистрационните файлове на приложението и регистрационните файлове на apache cxf в отделни файлове и извежда регистрационни файлове за пролет/хибернация на конзолата:

<?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 също има асинхронна поддръжка. Проверете AsyncAppender

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

person user5121658    schedule 16.07.2015

Вашият код, който използва тази конфигурация, използва ли Logger с име, което започва с "org.apache"? Ако не, няма да видите изход за този регистратор.

За да проверите това, използвайте горната конфигурация с този код:

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