【问题标题】:why do we need root and logger in log4j.xml为什么我们需要 root 和 log4j.xml 中的记录器
【发布时间】:2012-10-12 14:20:40
【问题描述】:

如果问题太琐碎,请原谅。我对 log4j 完全陌生。我看到有两个标签和标签,它们引用了各种appender。 假设我想将我的代码库中的信息记录在一个文件中,将其发送到我的电子邮件并打印到控制台。我希望将级别设置为信息。拥有一个引用三个附加程序的标签还不够吗?(文件、电子邮件和控制台)为什么我们需要另一个相同的标签?

【问题讨论】:

  • 我的意思是只有一个根标签还不够吗?哪个有三个对 appenders 的引用?

标签: log4j


【解决方案1】:

够了。

在 log4j 中,记录器与包相关联,有时与特定类相关联。记录器的包/类由属性“名称”定义。记录器在其包以及所有子包及其类中记录消息。唯一的例外是记录应用程序中所有类的消息的根记录器。

一个记录器也有级别,并且可能有一个或多个附加器(记录目标)附加到它。

在下一个示例中,我们有两个记录器:

  • 根记录器,将所有包中级别为 INFO 或更高级别的消息记录到各种目标:控制台、电子邮件和文件,
  • “com.foo”记录器将包“com.foo”及其子包中的WARN或更高级别的消息记录到另一个文件中。
<log4j:configuration>
    <!-- Declaration of appenders FILE, MAIL, CONSOLE and ANOTHERFILE -->
    ...
    <!-- -->

    <logger name="com.foo">
        <level value="warn"/>
        <appender-ref ref="ANOTHERFILE" /> 
    </logger>
    <root> 
        <priority value ="info" />
        <appender-ref ref="FILE" /> 
        <appender-ref ref="MAIL" />
        <appender-ref ref="CONSOLE" /> 
    </root>
</log4j:configuration>

您应该 read more 了解 log4j 基础知识。

【讨论】:

  • 根记录器是否也记录“com.foo”类的消息?
  • @mmc18 是的,绝对是。写入附加程序 ANOTHERFILE 的所有消息也写入根记录器的附加程序。
  • 补充一点,您可以通过将记录器的 additivity 属性设置为 false 来防止发送到 ANOTHERFILE 的消息被发送到根记录器。把它想象成一个例外,从较低的级别冒泡到顶部(根)。加法是没有“抛出”的“捕获”
  • 你如何以及在哪里引用/使用'logger name="com.foo"'?谢谢。
  • 只是一个问题,我们可以将根记录器错误和包级别记录设置为信息吗?
猜你喜欢
  • 1970-01-01
  • 2011-12-27
  • 2019-06-09
  • 2020-09-05
  • 2012-12-03
  • 2016-06-25
  • 2017-03-12
  • 1970-01-01
  • 2010-11-16
相关资源
最近更新 更多