Log4j не печатает сторонние логи (Spring.Hibernate и т. Д.) В RollingFileAppender - PullRequest
2 голосов
/ 09 февраля 2011

Я был на log4j некоторое время и прочитал довольно много статей, и все выглядят довольно просто, но когда я его реализую, это не работает.

У меня есть следующие требования:

1-> Необходимо создать 2 файла для 2 разных пакетов:

Итак, я создал в соответствии со спецификациями log4j, и он создает 2 файла на основе 2 разных пакетов, но только журналы, зарегистрированные в нашем приложении, регистрируются в этих файлах.

Журналы, сгенерированные из Spring или Hibernate и Ibatis, вообще не регистрируются в файле, но они попадают, и все другие журналы регистрируются на консоли.

Я размещаю log4j.xml, который я использую, любая помощь будет признательна: Также я перепробовал множество комбинаций, например, из root appender удалил ссылки, уже упомянутые в логгере, добавив их обратно в корень, добавив аддитивность к логгерам, но ничего не получилось:

<appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
    <param name="Threshold" value="DEBUG"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{ISO8601} DSL Service(CONSOLE) %-5p %c [%t]: %m%n%n"/>
    </layout>
</appender>

<appender name="FEPOCServiceLog"
    class="org.apache.log4j.RollingFileAppender">
    <param name="Append" value="true"/>
    <param name="maxFileSize" value="100KB" />
    <param name="maxBackupIndex" value="5" />
    <param name="File" value="C:\\tmp\\DSLService_1.0.log" />
    <param name="threshold" value="DEBUG"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern"
            value="%d{ISO8601} DService(CONSOLE) %-5p %c [%t]: %m%n%n" />
    </layout>
</appender>

<appender name="iServiceLog"
    class="org.apache.log4j.RollingFileAppender">
    <param name="maxFileSize" value="10MB" />
    <param name="maxBackupIndex" value="5" />
    <param name="File" value="C:\\tmp\\iService_1.0.log" />
    <param name="threshold" value="DEBUG"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern"
            value="%d{ISO8601} iService(CONSOLE) %-5p %c [%t]: %m%n%n" />
    </layout>
</appender>

Надеюсь, это поможет:

<logger name="com.fepoc.services.dataservice">
    <level value="DEBUG"/>
    <appender-ref ref="FEPOCServiceLog"/>                 
</logger>

<logger name="com.fepoc.mpbit">
    <level value="DEBUG"/>
    <appender-ref ref="iServiceLog"/>                 
</logger>

<logger name="net.sf.hibernate">
    <level value="DEBUG"/>  
    <appender-ref ref="FEPOCServiceLog"/>               
</logger>


<logger name="org.hibernate">
    <level value="DEBUG"/>
    <appender-ref ref="FEPOCServiceLog"/>                 
</logger>

<logger name="com.mchange.v2">
    <level value="DEBUG"/>   
    <appender-ref ref="FEPOCServiceLog"/>              
</logger>

<logger name="com.ibatis.sqlmap">
    <level value="DEBUG"/>     
    <appender-ref ref="FEPOCServiceLog"/>            
</logger>

<logger name="org.springframework">
    <level value="DEBUG"/>
    <appender-ref ref="FEPOCServiceLog"/>                 
</logger>

...

   <root> 
<priority value ="debug" /> 
<appender-ref ref="ConsoleAppender"/>
<appender-ref ref="FEPOCServiceLog"/>        
<appender-ref ref="iServiceLog"/>        

Спасибо, NK

1 Ответ

2 голосов
/ 09 февраля 2011

Проблема в том, что Spring и Hibernate не используют log4j.

Hibernate внутренне использует slf4j , поэтому вам нужно добавить slf4j-log4j привязку к вашему classpath, чтобы перенаправить вывод в log4j, см. SLF4J руководство пользователя .

Spring использует Commons Logging, вы можете перенаправить его вывод в log4j через slf4j, добавив jcl-slf4j bridge и slf4j-log4j binding, см. Logging Dependencies в Spring .

...