log4j2中<logger>中没有指定appender的输出
一 优先级
1.1 规则
1.如果一个 <logger>
没有显式配置 appender
,Log4j2 会将该日志事件传递给其 父 Logger 的 appender
。
2.这种传递行为会一直向上追溯,直到找到配置了 appender
的 Logger,或者到达 Root Logger。
3.如果日志事件最终传递到 Root Logger,并且 Root Logger 配置了 appender
,则日志会输出到 Root Logger 的 appender
。
4.如果 Root Logger 也没有配置 appender
,则日志事件会被丢弃(即不会有任何输出)
1.2 案例说明
com.example
Logger 没有指定 appender
,因此它的日志事件会传递给 Root Logger。
Root Logger 配置了 ConsoleAppender
,因此日志会输出到控制台。
1.3 结论
-
如果
<logger>
没有指定appender
,日志事件会传递给其父 Logger。 -
如果父 Logger 也没有
appender
,日志事件会继续向上传递,直到 Root Logger。 -
如果 Root Logger 也没有
appender
,则日志事件会被丢弃。 -
通过
additivity
属性可以控制是否将日志事件传递给父 Logger。
1.4 场景描述
如图:
Logger 未指定 appender,且 additivity="false"日志事件被丢弃,不会有任何输出。
1.5 additivity作用
1.additivity
属性控制日志事件是否传递给父 Logger
additivity="true"
(默认值):日志事件会传递给父 Logger。
additivity="false"
:日志事件不会传递给父 Logger
如果 additivity="false"
,且当前 Logger 没有配置 appender
,则日志事件会被丢弃。