请考虑以下代码段:
<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>
我是否正确假设第1节将以警告级别记录。而在所有级别的Section2(不是信息)?
更新:我的意思是第1节的警告级别或更高。
答案 0 :(得分:0)
不,那是不正确的。
发送到“ com.example.Section”记录器的任何级别为WARN
或更具体(ERROR
或FATAL
)的事件将被该记录器接受,并且发送给其附加程序。由于此记录器的可加性为false
,因此事件不会发送到其祖先的任何追加者。
发送到记录器“ com.example.Section2”的任何级别为INFO
或更高级别(WARN
,ERROR
,FATAL
)的事件都将被接受由该记录器发送给其附加程序。由于默认情况下,可加性为true
,因此该记录器接受的事件也将进入其祖先的附加器,而后者只会是根记录器的附加器。
由于日志记录级别设置为ALL
,因此无论日志记录级别如何,进入根记录程序的任何事件都将被接受并发送到其附加程序。由于这是根记录器的可加性,所以该记录器没有祖先。
log4j2手册包含additivity的示例和说明,也可以帮助您理解这一点。关于堆栈可加性,还有其他一些问题可能也有帮助。