log4j没有写消息到文件

时间:2015-02-02 15:13:02

标签: java tomcat logging log4j slf4j

看了很多这方面的例子,看到了一些令人困惑的东西。这是log4j.xml文件

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
  <appender name="console" class="org.apache.log4j.ConsoleAppender"> 
    <param name="Target" value="System.out"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/> 
    </layout> 
  </appender>

  <appender name="file" class="org.apache.log4j.RollingFileAppender">
       <param name="append" value="false" />
       <param name="maxFileSize" value="1000KB" />
       <param name="maxBackupIndex" value="5" />
       <!-- For Tomcat -->
       <param name="file" value="${catalina.home}/logs/demandManage.log" />
       <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" 
            value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
       </layout>
    </appender>

  <logger name="com.xxx.demand.domain.data" additivity="true">
    <level value="debug" /> 
    <appender-ref ref="file"/>
  </logger>

  <logger name="com.xxx.rita.serviceserver.controller.AbstractRestController" additivity="true">
    <level value="debug" />  
    <appender-ref ref="file"/>
    <appender-ref ref="console" /> 
  </logger>

  <logger name="com.xxx.dao.AbstractDAOImpl" additivity="true">
    <level value="debug" />  
    <appender-ref ref="file"/>
    <appender-ref ref="console" /> 
  </logger>


  <logger name="org.hibernate" >
    <level value="warn" />
    <appender-ref ref="file"/>
  </logger>

  <root> 
    <priority value ="warn" /> 
    <appender-ref ref="console" /> 
    <appender-ref ref="file"/>
  </root>

</log4j:configuration>

在我的java类中:

package com.xxx.dao;

public abstract class AbstractDAOImpl<T, ID extends Serializable> implements AbstractDAO<T,ID>{
    private Logger logger = LoggerFactory.getLogger(com.xxx.dao.AbstractDAOImpl.class);

    @SuppressWarnings("unchecked")
    public T read(ID id){
        T response = (T) getCurrentSession().get(clazz, id);
        if(response==null){
            logger.error(RiskTaker.name.get()+ " tried to load " + clazz + " of " +id);
            throw new RuntimeException("hibernate object did not exist");
        }
        return response;
    }

}

因此,当我使用此配置命中logger.error消息时,什么都不会发送到demandManage.log文件或控制台。我没有看到什么是错的。当我将root设置为调试时,hibernate当然几乎填满了该日志文件,因此它确实有效。 使用级别与优先级之间有区别吗?像slfj4 vs appache记录器一样?根设置优先级,但子记录器使用级别。 我在调试模式下启动tomcat并且知道我正在访问那些logger.error语句,但文件仍为空。可能我需要立即冲洗它吗? 我之前把xml文件中的记录器作为完全限定,并且在java类中仅作为类名,但修复它什么也没做。我想知道我错过了什么。先感谢您。

0 个答案:

没有答案