logback涉及配置仅限xml文档,其核心节点为logger,root节点本质上是一种顶级logger,面向环境下所有代码。
logback对logger的管理,底层是面向所有class文件的,对于特定类a.b.c.D的logger对象,会被缓存于cache中。同时,在创建该类的logger对象前,会把a、a.b、a.b.c三层路径的logger对象都逐一按序创建(即时代码中很可能不会用到)。且,某层级的logger对象会记录父、子(多个)logger对象。
在此前提下,结合logger的作用(是获取log数据,而不是输出并打印),则,某a.b.c.D类的logger对象会按照log级别拿到log数据,
1、首先判断自己有无appender(即输出日志的能力,有则输出一次并交由该appender打印);
2、再判断additivity,如为true,则将log数据再给父层的logger对象,后者会再次判断自身apperder与自身additivity;
3、上述流程直至到达root级的logger,或遇到某层logger对象的additivity为false。
在此过程中,
1、logger的log等级只会影响自身获取相应层级log数据,对子logger的数据无法拒绝(主动权在子logger的additivity属性),只要有appender都会按其能力输出打印一次;
2、logger如不设置additivity,默认true,默认提供父logger,则所有log数据默认都会到达root级logger;
3、logger如不设置appender-ref,默认无,因此某logger必须确认自己的层级,确保有一个父层logger是配置appender即具备输出能力的,一般都是root且子层均默认属性。