log4j没有记录信息级别

时间:2012-03-06 05:40:53

标签: java log4j

当我运行我的应用程序时,我在log4j.xml文件中有以下内容。仅在控制台中打印错误日志,不会打印信息日志。但是如果我注释掉jdbcAppender部分并且只使用

我希望打印错误和信息,同时需要将错误日志插入到数据库表错误中。

我该怎么做?

此致

<appender name="jdbcAppender" class="bean.CustomJdbcAppender"> 
        <param name = "jndiDataSource" value="myjdbcDS"/>        
        <layout class="org.apache.log4j.PatternLayout"> 
            <param name="ConversionPattern" 
              value="INSERT INTO errors (log_level, location, message) VALUES ( '%p',
              '%C;%L', '%m' )" 
            /> 
        </layout> 
    </appender>
    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender"> 
        <layout class="org.apache.log4j.PatternLayout"> 
            <param name="ConversionPattern" 
              value="%d{ISO8601} %p (%C;%L) %m%n" 
            /> 
        </layout> 
    </appender> 
    <category name="bean"><priority value="error"/>
    <appender-ref ref="jdbcAppender"/> 
    </category>
    <root> 
        <priority value="info"/> 
        <appender-ref ref="STDOUT"/> 
    </root> 

1 个答案:

答案 0 :(得分:1)

从记录器ERROR中删除bean优先级,使其日志记录级别从根记录器继承,该记录器设置为INFO级别。然后,来自此记录器的任何记录事件的级别大于或等于INFO都可以被拦截并转发到jdbcAppenderSTDOUT

  <category name="bean">
    <appender-ref ref="jdbcAppender"/> 
  </category>

ERROR实际只能记录jdbcAppender级事件,请在LevelMatchFilter上应用和配置DenyAllFilterjdbcAppender

<appender name="jdbcAppender" class="bean.CustomJdbcAppender"> 
        <param name = "jndiDataSource" value="myjdbcDS"/>        
        <layout class="org.apache.log4j.PatternLayout"> 
           <param name="ConversionPattern" value="INSERT INTO errors (log_level, location, message) VALUES ( '%p','%C;%L', '%m' )"  /> 
        </layout> 
        <filter class="org.apache.log4j.varia.LevelMatchFilter">
                  <param name="LevelToMatch" value="error" />
                  <param name="AcceptOnMatch" value="true"/>
        </filter>
        <filter class="org.apache.log4j.varia.DenyAllFilter" />
 </appender>