Logback,Java 日志框架。算法
Logback 如何加载配置的express
configuration 是配置文件的根节点,他包含的属性:安全
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!-- 其余配置省略-->
</configuration>
每一个 logger 度关联到 logger 上下文,默认上下文名称为 “default”。能够经过设置 contextName 修改上下文名称,用于区分不一样应该程序的记录app
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<contextName>myAppName</contextName>
<!-- 其余配置省略-->
</configuration>
用于定义键值对的变量, property 有两个属性 name 和 value,name 是键,value 是值,经过 property 定义的键值对会保存到logger 上下文的 map 集合内。定义变量后,可使用 “${}” 来使用变量框架
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<property name="APP_Name" value="myAppName" />
<contextName>${APP_Name}</contextName>
<!-- 其余配置省略-->
</configuration>
timestamp 有两个属性,key:标识此 timestamp 的名字;datePattern:时间输出格式,遵循SimpleDateFormat 的格式测试
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/>
<contextName>${bySecond}</contextName>
<!-- 其余配置省略-->
</configuration>
logger 有两种级别,一种是 root,一种是普通的 logger,logger 是用来设置某一个包或者具体的某一个类的日志打印机级别,以及制定的 appender。
logger 有三个属性lua
每一个 logger 都有对应的父级关系,它经过包名来决定父级关系,root 是最高级的父元素。
下面定义了四个 logger,他们的父子关系从小到大为:
com.lwc.qg.test.logbackDemo → com.lwc.qg.tes → com.lwc.qg → rootspa
<!-- 根 logger -->
<root level="info">
<appender-ref ref="STDOUT"/>
</root>
<!--
普通的 logger
name:类名或包名,标志该 logger 与哪一个包或哪一个类绑定
level:该 logger 的日志级别
additivity:是否将日志信息传递给上一级
-->
<logger name="com.lwc.qg.test.logbackDemo" level="debug" additivity="true">
<appender-ref ref="STDOUT"/>
</logger>
<logger name="com.lwc.qg.test" level="info" additivity="true">
<appender-ref ref="STDOUT"/>
</logger>
<logger name="com.lwc.qg" level="info" additivity="true">
<appender-ref ref="STDOUT"/>
</logger>
从该种级别来看,若是此时在最低层的 logger 输出日志信息,以该配置做为基础,它将会向父级的全部 logger 依次传递,因此按理来讲一个打印信息将会打印四次debug
从控制台上看,的确每条日志信息都被打印出了四次,可是细心从配置文件上来看,root 的日志级别配置的为 info,可是却输出 debug 级别的日志信息,因此从测试结果能够看出,向上传递的日志信息的日志级别将由最底层的子元素决定(最初传递信息的 logger),由于子元素设置的日志级别为 debug,因此也输出了 debug 级别的信息。
所以,从理论上来讲,若是子元素日志级别设置高一点,那么也将会只输出高级别的日志信息。实际上也是如此,若是咱们把 com.lwc.qg.test.logbackDemo 对应的 logger 日志级别设为 warn,那么将只会输出 warn 及其以上的信息日志
root 也是 logger 元素,但它是根 logger。只有一个 level 属性
appender 是负责写日志的组件,经常使用的组件有:
控制台日志组件,该组件将日志信息输出到控制台,该组件有如下节点
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
<target>System.out</target>
</appender>
文件日志组件,该组件将日志信息输出到日志文件中,该组件有如下节点
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>testFile.log</file>
<append>true</append>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
<prudent>true</prudent>
</appender>
滚动记录文件日志组件,先将日志记录记录到指定文件,当符合某个条件时,将日志记录到其余文件,该组件有如下节点
滚动策略
TimeBasedRollingPolicy:最经常使用的滚动策略,它根据时间来制定滚动策略,即负责滚动也负责触发滚动,包含节点:
FixedWindowRollingPolicy:根据固定窗口算法重命名文件的滚动策略,包含节点
triggeringPolicy:根据文件大小的滚动策略,包含节点
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
过滤器是用于日志组件中的,每通过一个过滤器都会返回一个确切的枚举值,分别是
经常使用的过滤器有如下:
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
<target>System.out</target>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
<target>System.out</target>
</appender>