【问题标题】:How to log warn only in log4j如何仅在 log4j 中记录警告
【发布时间】:2014-09-26 05:26:04
【问题描述】:

在 Struts 2 应用程序中,我们使用 log4j 进行日志记录。我只想记录警告但是当我尝试在我的 log4j.properties 中使用时

log4j.rootLogger=warn, stdout

它也会打印错误和致命日志。我只想警告日志。我在一些教程中阅读了日志级别。所以我知道为什么会出现错误和致命打印,因为它们的优先级低于警告。如何仅在我的控制台中打印警告日志?

我的 Java 代码:

import org.apache.log4j.Logger;

public class LogClass {

    private static final org.apache.log4j.Logger log = Logger.getLogger(LogClass.class);

    public static void main(String[] args) {
            log.trace("Trace");
            log.debug("Debug");
            log.info("Info");
            log.warn("Warn");
            log.error("Error");
            log.fatal("Fatal");
    }
}

任何帮助将不胜感激!

【问题讨论】:

  • 是否可以切换到XML配置文件而不是属性文件?
  • @voicu,好吧,如果我在 log4j 的 xml 配置中得到解决方案,我会切换
  • 我有类似的问题,我正在使用 log4j2,如何在 log4j2 xml 配置中应用 LevelRangeFilter

标签: java properties log4j warnings


【解决方案1】:

使用org.apache.log4j.varia.LevelRangeFilter 过滤器。您的 XML 配置文件可能是:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"
    debug="false">

    <appender name="warn-out" class="org.apache.log4j.FileAppender">
        <param name="File" value="warn.log" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%m%n" />
        </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="LevelMax" value="warn" />
            <param name="LevelMin" value="warn" />
            <param name="AcceptOnMatch" value="true" />
        </filter>
    </appender>

    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%m%n" />
        </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="LevelMax" value="warn" />
            <param name="LevelMin" value="warn" />
            <param name="AcceptOnMatch" value="true" />
        </filter>
    </appender>

    <root>
        <level value="warn" />
        <appender-ref ref="warn-out" />
        <appender-ref ref="console" />
    </root>
</log4j:configuration>

更多选项请转至here

看起来属性文件配置不支持过滤器。以下摘自 log4j 的官方 wiki:

PropertiesConfigurator 不支持过滤器。

编辑:在 XML 中添加了控制台附加程序并关闭了 log4j 的调试。现在它应该同时进入文件和控制台。

【讨论】:

  • 打印 log4j:reset attribute="false"。 log4j:阈值 =“空”。 log4j:root 的级别值为 [warn]。 log4j:根级别设置为 WARN log4j:类名:[org.apache.log4j.FileAppender] log4j:将属性 [file] 设置为 [warn.log]。 log4j:解析类的布局:“org.apache.log4j.PatternLayout” log4j:将属性 [conversionPattern] 设置为 [%m%n]。 log4j:将属性 [levelMax] 设置为 [WARN]。 log4j:将属性 [levelMin] 设置为 [WARN]。 log4j:将属性 [acceptOnMatch] 设置为 [true]。 log4j:将类型为 [class org.apache.log4j.varia.LevelRangeFilter] 的过滤器添加到名为 [warn-out 的附加程序
  • @Madhesh,你检查过warn.log 文件吗? :)
  • ,我使用控制台附加程序,所以只有我收到上述错误。我将您的答案更改为控制台附加程序。它对我有用。谢谢
猜你喜欢
  • 2018-03-21
  • 2018-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-29
  • 2017-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多