【问题标题】:Additivity false with different log levels, which logger level is used?不同日志级别的可加性为假,使用哪个记录器级别?
【发布时间】:2019-06-14 16:23:04
【问题描述】:

请考虑以下 sn-p:

   <AsyncLogger name="com.example.Section" level="WARN" additivity="false">
        <AppenderRef ref="Logger1" />

   </AsyncLogger>

     <AsyncLogger name="com.example.Section2" level="INFO"/>

    <AsyncRoot level="ALL">
        <AppenderRef ref="Logger1" />
    </AsyncRoot>

我是否正确假设 Section1 将以警告级别记录。以及第 2 部分的所有级别(不是信息)?

更新:我的意思是第 1 节的警告级别或以上。

【问题讨论】:

    标签: java logging log4j log4j2 log-level


    【解决方案1】:

    不,这是不正确的。

    发送到“com.example.Section”记录器的任何级别为WARN 或更具体(ERRORFATAL)的事件都将被该记录器接受并发送到其附加程序。由于此记录器的可加性为false,因此不会将事件发送到其祖先的任何附加程序。

    发送到记录器“com.example.Section2”的任何级别为INFO 或更具体(WARNERRORFATAL)的事件都将被该记录器接受并发送到其附加程序.由于可加性默认为true,因此此记录器接受的事件也将发送到其祖先的附加器,这将只是根记录器的附加器。

    任何发送到根记录器的事件都将被接受并发送到它的附加程序,无论日志级别如何,因为它的级别设置为ALL。由于这是根记录器,可加性没有任何作用,因此该记录器没有祖先。

    log4j2 手册中有additivity 的示例和解释,也可以帮助您理解这一点。 stackoverflow 上还有一些其他关于可加性的问题也可能会有所帮助。

    【讨论】:

    • 我说Section2会是所有级别的。
    • 我的意思是section1的警告级别或以上。
    • 我明白了,那么您对第 1 节是正确的,但对第 2 节不正确。请阅读我的回答的第二段。
    • 所以他的根级别没有覆盖Section2级别?
    • 不,它们是独立的记录器,它们不会相互覆盖。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 2014-12-27
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多