【问题标题】:Turn off debug or log messages in log4j.xml关闭 log4j.xml 中的调试或日志消息
【发布时间】:2014-09-29 04:15:49
【问题描述】:

我想在 log4j.xml 中关闭调试或记录消息。

我的 log4j.xml 是:

<appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
        <param name="Threshold" value="debug" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{dd MMM yyyy HH:mm:ss} %5p %c{1} - %m%n" />
        </layout>
    </appender>

    <appender name="fileAppender" class="org.apache.log4j.RollingFileAppender">
        <param name="append" value="false" />
        <param name="file" value="./logs/learning.log" />
        <param name="Threshold" value="debug" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{dd MMM yyyy HH:mm:ss} %5p %c{1} - %m%n" />
        </layout>
    </appender>
    <root>
        <level value="DEBUG" />
        <appender-ref ref="consoleAppender" />
        <appender-ref ref="fileAppender" />
    </root>

我的 Java 代码:

 public static void main(String[] args) {
        log.info("info");
        log.debug("dddffff");
    }

如果我运行这个程序,仍然会记录 INFO 消息,下面是日志文件

07 Aug 2014 12:54:49  INFO MainClass - info
07 Aug 2014 12:54:49 DEBUG MainClass - dddffff

现在我想关闭 INFO 消息。

【问题讨论】:

  • 所以你想单独记录错误消息。这意味着它不应该记录logger.debug

标签: java xml logging log4j


【解决方案1】:

您可以关闭类或包的日志。例如:

<!-- console -->
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
    <param name="threshold" value="TRACE" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="conversionPattern" 
               value="%d{dd MMM yyyy HH:mm:ss} %5p %c{1} - %m%n" />
    </layout>
</appender>

<!-- categories -->
<category name="org.apache.commons">
    <priority value="OFF" />
</category>
<category name="org.apache.catalina.loader.WebappClassLoader">
    <priority value="OFF" />
</category>

<!-- root -->
<root>
    <priority value="TRACE" />
    <appender-ref ref="STDOUT" />
</root>

Apache log4j 1.2 - Short introduction to log4j 中查看更多信息。

【讨论】:

    【解决方案2】:

    设置日志记录级别 Value = OFF 而不是 DEBUG

    【讨论】:

      【解决方案3】:

      我们应该写入 log4j 配置文件

      <logger name="packageName.Class" additivity="false">
          <level value="INFO" />
          <appender-ref ref="fileAppender" />
      </logger>
      

      我在配置文件中使用了类的完整限定名,这导致 getLogger 方法只写入来自特定类的日志到 appender 文件。仅使用类的名称,您将在 appender 文件中获得所有从其他同级别或更高级别的类写入的日志。

      【讨论】:

      • 能否请您详细说明您的答案,添加更多关于您提供的解决方案的描述?
      • 我在配置文件中使用了类的全名,这导致getLogger方法写入appender文件只记录来自特定类的日志,使用类名只有你才能进入appender 将其他同级别或以上级别写入的所有日志文件归档
      【解决方案4】:

      将阈值设置为info,例如,如果您需要将OFF 用于调试的消息转至文件附加程序,请在配置文件中设置,

      <appender name="fileAppender" class="org.apache.log4j.RollingFileAppender">
          <param name="append" value="false" />
          <param name="file" value="./logs/learning.log" />
          <param name="Threshold" value="INFO" />
          <layout class="org.apache.log4j.PatternLayout">
              <param name="ConversionPattern" value="%d{dd MMM yyyy HH:mm:ss} %5p %c{1} - %m%n" />
          </layout>
      </appender>
      

      只为info启用日志记录,不为调试启用。您可以通过设置OFF关闭日志记录。

      Read here for more info关于为log4j配置xml文件。

      【讨论】:

        【解决方案5】:

        您可以像这样为包设置日志记录级别:

        log4j2.xml sn-p:

            <Loggers>
                <Root level="debug">
                    <appender-ref ref="Console" />
                </Root>
                <Logger name="org.eclipse.jetty" level="info" additivity="true">
                    <appender-ref ref="Console" />
                </Logger>
            </Loggers>
        

        在此示例中,org.eclipse.jetty 包中的类输出 INFO 级别的日志记录。所有其他类都输出 DEBUG 级别的日志记录。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-27
          • 1970-01-01
          • 1970-01-01
          • 2014-06-25
          • 1970-01-01
          相关资源
          最近更新 更多