当前位置: 首页 > 知识库问答 >
问题:

如何用LOG4J将不同级别的特定类记录到不同的追加器中

锺超英
2023-03-14

我有一个情况,我有两个追加器,一个写到控制台,另一个写到文件。我想记录除一个类以外的所有调试级别的东西。对于这个类,我想要记录调试到控制台,错误到文件。

我发现这种过滤是通过类别标记完成的,但是我还没有设法将不同的级别拆分给特定类上的不同追加器。

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration>
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <param name="encoding" value="UTF-8" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ISO8601}: %p [%t] %c - %m%n"/>
        </layout>
    </appender>

    <appender name="file-bl" class="org.apache.log4j.rolling.RollingFileAppender">
        <param name="append" value="true"/>
        <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
            <param name="FileNamePattern" value="log/server-bl2.log.%d{yyyy-MM-dd}.gz"/>
            <param name="ActiveFileName" value="log/server-bl2.log"/>
        </rollingPolicy>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ISO8601}: %p [%t] %c - %m%n"/>
        </layout>
    </appender>

    <logger name="org">
        <level value="DEBUG"/>
        <appender-ref ref="console"/>
        <appender-ref ref="file-bl"/>
    </logger>

    <logger name="org.springframework" additivity="false">
        <level value="ERROR"/>
        <appender-ref ref="file-bl"/>
    </logger>

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

</log4j:configuration>

共有1个答案

隆谦
2023-03-14

好的,所以最后我想出了一个这样的解决方案:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration>
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <param name="encoding" value="UTF-8" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ISO8601}: %p [%t] %c - %m%n"/>
        </layout>
    </appender>

    <appender name="file-bl" class="org.apache.log4j.rolling.RollingFileAppender">
        <param name="append" value="true"/>
        <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
            <param name="FileNamePattern" value="log/server-bl.log.%d{yyyy-MM-dd}.gz"/>
            <param name="ActiveFileName" value="log/server-bl.log"/>
        </rollingPolicy>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ISO8601}: %p [%t] %c - %m%n"/>
        </layout>
    </appender>

    <logger name="org.springframework" additivity="false">
        <level value="DEBUG"/>
        <appender-ref ref="console"/>
    </logger>

    <logger name="org.mybatis" additivity="false">
        <level value="DEBUG"/>
        <appender-ref ref="console"/>
    </logger>    

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

</log4j:configuration>

日志记录的根级别是DEBUG,还有2个追加器:console和file-bl。然后,有两个例外:org.SpringFramework和org.MyBatis。对他们来说,只适用1个appender-console。

不过,这并不是我在开始时描述的问题的精确解决方案,因为我根本没有记录org.springframework和org.mybatis。

 类似资料:
  • 我希望文件记录器以这样的方式配置日志类别'X' 记录器one在信息级别上记录“X”,在调试级别上记录其他东西 记录器在调试级别上有两个日志“x”

  • 问题内容: 我有一个普通的INFO级别应用日志。我需要的是另外记录所有错误级别的事件,以单独的错误日志。我正在使用这样的配置: 此配置仅记录错误。如果我首先放置信息级别记录器,则它将仅记录到一般附加程序,但错误记录器将无法工作。我想让他们两个都工作。 问题答案: 您需要做的是只有一个定义了INFO级别的定义,但是在您的两个追加器定义中,您需要相应地设置其阈值,例如 然后,将两个追加程序添加到记录器

  • 问题内容: 我正在使用log4j登录我的应用程序。我正在尝试在不同文件中使用不同级别的日志,但是出了点问题。对于解决此问题的任何帮助,我们将不胜感激。 问题答案: log4j附加程序的标准行为是,它们以其阈值级别 或更高 的阈值记录所有消息,即具有阈值INFO的附加器将记录INFO,WARN,ERROR和FATAL消息,但不记录DEBUG。如果你想记录 只有 INFO信息,但不会发出警告及以上,然

  • 问题内容: 我想使用Log4J记录我的Java项目。我在src目录中创建了一个log4j.properties文件,其内容如下: 例如,我只想在我的主要方法中使用“ DEFAULT_LOGGER”。所以我写道: 但是,当我执行main方法时,我将消息“ Process Logger”打印到所有Appender(stdout,file和file2),但是我只想将其打印到file2。我该怎么做,或者更

  • 由于log4j的官方文档是一个断开的链接,而且入门指南对我没有帮助,所以我想知道如何使用文件而不是文件为同一个记录器使用两个具有不同日志级别的追加器。 例如,像这样:

  • 问题内容: 如何配置Logback以将记录器的不同级别记录到不同的目的地? 例如,给定以下Logback配置,Logback会将消息记录到并将消息记录到吗? (请注意,此示例是第3章:Logback配置中所示示例的变形)。 问题答案: 更新:有关使用Groovy的基于所有配置的方法,请参见DeanHiller的答案。 好的,这是我最喜欢的xml方法。我为Eclipse版本执行此操作,因此我可以 单