【问题标题】:log4j: different category priority than appender thresholdlog4j:与附加器阈值不同的类别优先级
【发布时间】:2011-01-19 20:33:30
【问题描述】:

我一直试图让这个简单的用例工作但不能:在 FILE Appender 上定义默认的 INFO 阈值,但定义一个具有 DEBUG 级别的类别。这是我正在使用的 jboss 4.2.1.GA log4j.xml 文件,我只想记录 java.sql 调用。

   <appender name="SQL_FILE" class="org.jboss.logging.appender.DailyRollingFileAppender">
      <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
      <param name="File" value="${jboss.server.log.dir}/sql.log"/>
      <param name="Append" value="false"/>
      <param name="Threshold" value="INFO"/>

      <param name="DatePattern" value="'.'yyyy-MM-dd"/>

      <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern" value="%d %-5p [%c] %C %m%n"/>
      </layout>
   </appender>

  <category name="java.sql">
    <priority value="DEBUG"/>
    <appender-ref ref="SQL_FILE"/>
  </category>

   <root>
      <appender-ref ref="SQL_FILE"/>
   </root>

它不只记录 java.sql,它记录 INFO 及更高版本,并且不包含任何 java.sql 信息。如果没有简单的解决方案,那么我只能将 appender Threshold 设置为 DEBUG 并关闭包含的多个类别的所有日志记录,这似乎是浪费时间。

我尝试了以下方法,但无法正常工作:Configuring multiple log files in log4j while using categories

【问题讨论】:

    标签: java jboss log4j


    【解决方案1】:

    我很快就找到了解决方案。基本上用例在 jboss wiki 中描述:http://docs.jboss.org/process-guide/en/html/logging.html Section 10.3.5 Redirecting Category Output。这篇博客文章也很有帮助:ptth://ourcraft.wordpress.com/2008/10/23/customizing-log4j-logging-on-jboss/#comment-796。

    这就是我使用的最有效的方法:

       <appender name="SQL_FILE" class="org.jboss.logging.appender.DailyRollingFileAppender">
          <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
          <param name="File" value="${jboss.server.log.dir}/sql.log"/>
          <param name="Append" value="false"/>
    
          <param name="DatePattern" value="'.'yyyy-MM-dd"/>
    
          <layout class="org.apache.log4j.PatternLayout">
             <param name="ConversionPattern" value="%d %-5p [%c] %C %m%n"/>
          </layout>
    
       </appender>
    
    <category name="java.sql.Connection"  additivity="false">
        <priority value="DEBUG"/>
        <appender-ref ref="SQL_FILE"/>
    </category>  
    
       <root>
          <appender-ref ref="CONSOLE"/>
          <appender-ref ref="FILE"/>
       </root>
    

    请注意,您不想在 root 中定义 SQL_FILE 附加程序;因为某些原因。那是最后一块。

    【讨论】:

    • 这个解决方案对性能不是很好。在 JBoss 4.2.1 中,默认情况下,root 记录器设置为DEBUG,并且附加程序使用阈值来解决这个问题。这意味着任何检查Log.isDebugEnabled() 的Java 代码都将执行。在调试器中尝试一下,看看:-)。我的解决方案将避免这个问题。
    • 事实上,如果 everything 正在将 DEBUG 输出写入SQL_FILE appender,而不仅仅是 iBatis,我不会感到惊讶。
    【解决方案2】:

    据我所知,java.sql 包中的类实际上并没有进行任何日志记录,而且它们绝对不会写入 log4j(甚至是 commons-logging)。

    但是,出于理论的目的,如果它是一个不同的包(并且实际使用了 commons-logging),你将如何解决这个问题:

    1. SQL_FILE appender 中删除阈值。
    2. 将行:&lt;priority value="INFO"/&gt; 添加到 &lt;root/&gt; 元素(appender-ref 之前)。
    3. 保存并重新启动 JBoss。

    最后,请注意,对于某些 JDBC 问题,DriverManager.setLogWriter 方法可能会有所帮助(请参阅http://java.sun.com/products/jdbc/reference/faqs/index.html#4)。

    编辑: 由于您已经表明您实际上对记录 iBatis 输出感兴趣,因此您只需将 &lt;category name="java.sql"&gt; 更改为 &lt;category name="com.ibatis"&gt;

    【讨论】:

    • 感谢您的回复。请参阅下面的解决方案。具有讽刺意味的是,您是对的,java.sql 实际上并没有进行任何日志记录。但我想通过ibatis我能够得到输出。这是一个示例:2010-02-22 16:48:45,469 DEBUG [java.sql.Connection] com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl {conn-100000} Connection 2010-02-22 16:48:45,479 DEBUG [java.sql.Connection] com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl {conn-100000} 准备语句:SELECT.......
    • 詹姆斯没有什么讽刺的。 java.sql 是一个核心的 JAVA 包。它不应该使用 log4j 或 commons-logging。 java.util.logging.Logger 是一个 JDK 类,可以使用,但它来自 JDK 1.4。
    【解决方案3】:

    JBoss 4.2.1.GA 需要的额外步骤是从战争中删除所有 log4j jar 文件。如果此 jar 包含在您的战争中,则永远不会写入 sql.log 文件。

    maven pom.xml 条目示例:

    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.13</version>
        <scope>provided</scope>
    </dependency>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-24
      • 1970-01-01
      • 2014-07-23
      • 2011-06-10
      • 1970-01-01
      • 2017-07-07
      • 2021-12-16
      相关资源
      最近更新 更多