Logback,Java 日志框架。
Logback 如何加载配置的
configuration 是配置文件的根节点,他包含的属性:
设置上下文名称:contextName
每个 logger 度关联到 logger 上下文,默认上下文名称为 “default”。可以通过设置 contextName 修改上下文名称,用于区分不同应该程序的记录
myAppName
设置变量:property
用于定义键值对的变量, property 有两个属性 name 和 value,name 是键,value 是值,通过 property 定义的键值对会保存到logger 上下文的 map 集合内。定义变量后,可以使用 “${}” 来使用变量
${APP_Name}
获取时间戳字符串:timestamp
timestamp 有两个属性,key:标识此 timestamp 的名字;datePattern:时间输出格式,遵循SimpleDateFormat 的格式
${bySecond}
logger 有两种级别,一种是 root,一种是普通的 logger,logger 是用来设置某一个包或者具体的某一个类的日志打印机级别,以及制定的 appender。
logger 有三个属性
每个 logger 都有对应的父级关系,它通过包名来决定父级关系,root 是最高级的父元素。
下面定义了四个 logger,他们的父子关系从小到大为:
com.lwc.qg.test.logbackDemo → com.lwc.qg.tes → com.lwc.qg → root
从该种级别来看,如果此时在最低层的 logger 输出日志信息,以该配置作为基础,它将会向父级的所有 logger 依次传递,所以按理来说一个打印信息将会打印四次
从控制台上看,的确每条日志信息都被打印出了四次,但是细心从配置文件上来看,root 的日志级别配置的为 info,但是却输出 debug 级别的日志信息,所以从测试结果可以看出,向上传递的日志信息的日志级别将由最底层的子元素决定(最初传递信息的 logger),因为子元素设置的日志级别为 debug,所以也输出了 debug 级别的信息。
因此,从理论上来说,如果子元素日志级别设置高一点,那么也将会只输出高级别的日志信息。实际上也是如此,如果我们把 com.lwc.qg.test.logbackDemo 对应的 logger 日志级别设为 warn,那么将只会输出 warn 及其以上的信息
root 也是 logger 元素,但它是根 logger。只有一个 level 属性
appender 是负责写日志的组件,常用的组件有:
控制台日志组件,该组件将日志信息输出到控制台,该组件有以下节点
%-4relative [%thread] %-5level %logger{35} - %msg %n
System.out
文件日志组件,该组件将日志信息输出到日志文件中,该组件有以下节点
testFile.log
true
%-4relative [%thread] %-5level %logger{35} - %msg%n
true
滚动记录文件日志组件,先将日志记录记录到指定文件,当符合某个条件时,将日志记录到其他文件,该组件有以下节点
rollingPolicy
滚动策略
TimeBasedRollingPolicy:最常用的滚动策略,它根据时间来制定滚动策略,即负责滚动也负责触发滚动,包含节点:
FixedWindowRollingPolicy:根据固定窗口算法重命名文件的滚动策略,包含节点
triggeringPolicy:根据文件大小的滚动策略,包含节点
logFile.%d{yyyy-MM-dd}.log
30
%-4relative [%thread] %-5level %logger{35} - %msg%n
过滤器是用于日志组件中的,每经过一个过滤器都会返回一个确切的枚举值,分别是
常用的过滤器有以下:
INFO
ACCEPT
DENY
%-4relative [%thread] %-5level %logger{35} - %msg %n
System.out
INFO
%-4relative [%thread] %-5level %logger{35} - %msg %n
System.out