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

为什么我们需要log4j.xml中的root和logger,log4j,Log4j,如果问题太琐碎,请原谅。我对log4j完全陌生。我已经看到有两个标签和标签,它们指的是不同的appender。 假设我想将代码库中的信息记录在一个文件中,将其发送到电子邮件并打印到控制台。我想把级别设置为info。仅仅有一个引用了三个appender(文件、电子邮件和控制台)的标签还不够吗?为什么我们还需要另一个标签呢 这就足够了 在log4j中,记录器与包关联,有时与特定类关联。记录器的包/类由属性“name”定义。记录器将消息记录在其包以及所有子包及其类中。唯一的例外是根记录器,它记录应用程

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

这就足够了

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

记录器还具有级别,并且可能有一个或多个附加器(日志记录目标)连接到它

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

  • 根记录器,用于将所有包中级别信息或更高的消息记录到各种目标:控制台、电子邮件和文件
  • “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>
    
    
    ...
    
    关于log4j基础。

    我的意思是,只有一个根标记还不够吗?哪个有三个对appender的引用?根记录器是否也记录“com.foo”classess的消息?@mmc18是的,明确地说。写入appender另一个文件的所有消息也会写入根记录器的appender。请注意,通过将记录器的additivity属性设置为false,可以防止发送到另一个文件的消息被发送到根记录器。将其视为一个例外,从较低的级别向上冒泡(根)。可添加性是指没有“抛出”的“捕获”如何以及在何处引用/使用“logger name=“com.foo”?谢谢。只是一个问题,我们可以将根记录器错误和包级别日志设置为info吗?