Logback日志框架中最重要的3个部件是Logger,Appender,Layout(即相应于《Java日志框架——基本概念》中的Logger,Appender,Formatter)
Logger logger = LoggerFactory.getLogger("com.dslztx.Main"); Logger logger1 = LoggerFactory.getLogger(com.dslztx.Main.class);
存在一个特殊的Logger实例,它的名字为“org.slf4j.Logger.ROOT_LOGGER_NAME”,即“ROOT”
Logger实例之间具有层次关系,具体有两种层次关系:祖先子孙层次关系和父亲儿子层次关系(父亲儿子层次关系是特殊的祖先子孙层次关系)。
根据以下两个原则来确定Logger实例之间的层次关系:2)除了第1种情况外,Logger实例之间的层次关系跟相应的Logger实例名字之间的层次关系一致。比如现在有3个Logger实例A,B,C,A的名字为"com",B的名字为"com.dslztx",C的名字为"com.dslztx.Main",那么A与B是父亲儿子层次关系,B与C是父亲儿子层次关系,A与C是祖先子孙层次关系
Logger实例应该设置Level属性,如果某个Logger实例的Level属性未设置,那么沿着Logger实例的层次关系向上回溯直到最顶层的"ROOT"Logger实例为止。在这个过程中,碰到的第一个配置Level属性的祖先Logger实例的Level属性值被用来作为本Logger实例的Level属性值(可取值集合为:TRACE,DEBUG,INFO,WARN,ERROR,ALL,OFF)
以上过程可用图1表述:
图1
具体可见如图2,图3,图4,图5所示的4个例子。
图2
图3
图4
图5
调用Logger实例的日志记录方法,会产生日志记录请求,日志记录请求也有一个Level属性(可取值集合为:TRACE,DEBUG,INFO,WARN,ERROR)。
这两个Level属性值的用途在于:只有当日志记录请求的Level属性值大于等于相应的Logger实例的Level属性值的时候,该日志记录请求才是有效的。可用图6来进行表述。
图6
TRACE < DEBUG < INFO < WARN < ERROR那么现在假定有一个Logger实例A,它的Level属性值为DEBUG,调用A上的info()方法,那么得到的日志记录请求B的Level属性值为INFO,因为INFO > DEBUG,因而日志记录请求B是有效的;调用A上的trace()方法,那么得到的日志记录请求C的Level属性值为TRACE,因为TRACE < DEBUG,因而日志记录请求C是无效的。
另外,当一个Logger实例的Level值设为OFF的时候,任何在该Logger实例上产生的日志记录请求都是无效的;当一个Logger实例的Level值设为ALL的时候,任何在该Logger实例上产生的日志记录请求都是有效的。
即在Logback运行的时候,相同名字的Logger实例只保存一份。
二、Appender
Appender代表日志输出目的地,可以是Console,File,Sockets,DataBase等等。一个Logger实例上绑定的Appender实例不仅来自自身的绑定,也来自祖先和父亲Logger实例的Appender绑定,即可以继承祖先和父亲Logger实例绑定的Appender实例。该过程可以用图7进行表述。图8所示是一个具体的例子。
图7
图8
三、Layout
绑定在Appender上,用来格式化Appender的输出
参考文献:
[1]http://logback.qos.ch/manual/architecture.html