为什么我们需要log4j.xml中的root和logger

Par*_*war 24 log4j

请原谅,如果这个问题太琐碎了.我对log4j完全不熟悉.我已经看到有两个标签和标签,它们指的是各种appender.假设我想将我的代码库中的信息记录在一个文件中,将其发送到我的电子邮件并将其打印到控制台.我希望级别设置为info.是不是只有一个标签引用了三个appender?(文件,电子邮件和控制台)为什么我们需要另一个?

Art*_*nov 36

这就够了.

在log4j中,记录器与包相关联,或者有时与特定类相关联.记录器的包/类由属性"name"定义.记录器在其包中以及所有子包及其类中记录消息.唯一的例外是根记录器,它记录应用程序中所有类的消息.

记录器也具有级别,并且可以附加一个或多个appender(记录目标).

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

  • 根记录器,将所有包中具有级别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>
    
    Run Code Online (Sandbox Code Playgroud)

您应该阅读有关log4j基础知识的更多信息.

  • 只需注意一点,您可以通过将记录器的additivity属性设置为false来阻止发送到ANOTHERFILE的消息发送到根记录器。认为它是一个例外,从较低层到最高层(根)冒泡。加性是没有“投掷”的“接球” (2认同)