2015-06-03 2 views
0

Мне нужно выбрать структуру ведения журнала для замены log4j. я выбрал SLF4J + Logback для лесозаготовок изначально и написал следующий конфиг, который выводит Журнальные приложений и Apache CXF'S в отдельных файлах и выводит рессора/гибернации журналы на консоли:logback to log4j2 async logging migration

<?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 - на самом деле он пуст, и его журнал печатается на консоль сервера.

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

ответ

0

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

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

Logger logger = LogManager.getLogger("org.apache.anything"); 
logger.debug("test");