Java 不同日志级别的相加性为false,使用哪个日志级别? 请考虑下面的片段: <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>

Java 不同日志级别的相加性为false,使用哪个日志级别? 请考虑下面的片段: <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>,java,logging,log4j,log4j2,log-level,Java,Logging,Log4j,Log4j2,Log Level,我假设第1部分将以警告级别记录是否正确。和第2节的所有级别(非信息) 更新:我指的是第1节的警告级别或更高。不,这是不正确的 发送到“com.example.Section”记录器的任何级别为WARN或更具体(ERROR或FATAL)的事件都将被该记录器接受并发送到其附件。由于此记录器的可加性为false,因此事件不会发送到其祖先的任何附加器 发送到记录器“com.example.Section2”的任何级别为INFO或更具体(WARN、ERROR、FATAL)的事件都将被该记录器接受并发送到其

我假设第1部分将以警告级别记录是否正确。和第2节的所有级别(非信息)


更新:我指的是第1节的警告级别或更高。

不,这是不正确的

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

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

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


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

我说第2节将在所有级别。我的意思是第1节的警告级别或更高级别。我明白了,那么你对第1节的看法是正确的,但对第2节的看法是错误的。请阅读我答案的第二段。所以根级别不覆盖Section2级别?不,它们是独立的记录器,它们不相互覆盖。