logback配置

来源:互联网 发布:身份证nfc读取 软件 编辑:程序博客网 时间:2024/06/01 07:25

根节点Configuration

Configuration包含属性

  • scan: 是否扫描配置文件的变化并重新加载,默认为true
  • scanPeriod:扫描配置文件变化的时间间隔,只有当scan为true时生效。默认时间单位为毫秒,默认扫描间隔为1分钟。
  • debug:是否打印logback内部的日志信息,可以实时打印logback运行状态。默认值为false

Configuration包含四个常用的子节点Property、appender、logger、root

Property

用来定义变量的标签。通过name属性指定变量名称,value属性指定变量值,通过”${}”来引用变量,类似于shell中变量的用法

<Property name="log.dir" value="${CATALINA_BASE}/logs"/>

appender

appender是真正写日志的组件,有两个必要的属性name和class。name指定appender名称,class指定appender的全限定名。appender的子节点有appender-ref、Append、discardingThreshold、encoder、File、filter、queueSize、rollingPolicy,下面分别进行说明:

  • File:日志写入的文件名。可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,创建失败则会抛出异常并且日志丢失。没有默认值
  • Append:日志是否被追加到文件结尾。如果为true则追加,如果为false则清空现存文件,从文件头开始打印。默认是true
  • encode:对日志记录进行格式化
  • rollingPolicy:设置滚动策略,涉及文件移动以及重命名。
  • filter:过滤器
  • appender-ref:指向另一个appender的name。一个appender中可以包含另一个appender
  • discardingThreshold:日志丢弃阈值。
  • queueSize:队列大小,默认为256

在异步记录日志中,AsyncAppender会将写日志的事件写入到一个Buffer中(这里选用的是BlockingQueue),然后一个专门的写线程会不断的从Buffer中取出事件并交给对应的Appender进行处理。

我们可以通过queueSize来配置BlockingQueue的大小。当日志的产生速度大于日志的消费速度的时候,队列将被填满,这时候应用程序将阻止记录新的日志,直到队列未填满。我们可以通过discardingThreshold来配置一个阈值,超过这个阈值后,Logback将丢弃TRACE、DEBUG和INFO级别的event,只保留WARN和ERROR级别的event,这样可以尽量避免队列填满导致的程序阻塞。discardingThreshold默认为20%,在队列剩余大小小于20%时执行丢弃策略。

rollingPolicy

rollingPolicy中最常用的就是TimeBasedRollingPolicy,能够按照时间来制定滚动策略。有fileNamePattern和maxHistory两个子节点

  • fileNamePattern:必要节点,包含文件名及”%d”转换符,例如fileNamePattern为”test.log.%d{yyyy-MM-dd}”,则表示按天收集日志,日志格式为test.log.2017-09-06
  • maxHistory:保存归档文件的数量。超过这个数量,则要删除最早的归档文件

encode

encode节点主要用来对日志记录进行格式化,负责两件事:把日志信息转换成字节数组、把字节数组写入到输出流。目前PatternLayoutEncoder是唯一有用的且默认的encoder,有一个节点,用来设置日志的输入格式。使用“%”加“转换符”方式,如果要输出“%”,则必须进行转义“\%”。Pattern里面的转义

  • %c{length}:输出日志的logger名,可以有一个整形参数来指定logger名的最大长度,用来缩短logger名。例如%c{5}
  • %d{pattern}:输出日志的打印时间,例如%d{yyyy-MM-dd HH:mm:ss.SSS}
  • %F/file:输出执行日志请求的java源文件名
  • %L/line:输出执行日志请求的行号
  • %M/method:输出执行日志请求的方法名
  • %n:输出平台无关的分行符
  • %p/le/level:输出日志级别
  • %t/thread:输出产生日志的线程名
  • %replace(p){r,t}:p为日志内容,r是正则表达式,将p中符合r的内容替换为t
    格式修饰符中,左对齐(-),接着是最小宽度(十进制数据);最大宽度修饰符是点号”.”后面加十进制数字

filter

filter过滤器,执行一个过滤器会返回一个枚举值,即DENY、NEUTRAL、ACCEPT

  • DENY:日志立即被抛弃不再经过其他过滤处理器
  • NEUTRAL:有序列表里的下一个过滤器接着处理日志
  • ACCEPT:日志立即被处理,不再经过剩余过滤器
    一个appender中能够添加一个或者多个Filter,多个Filter按照配置顺序。下面是几种常用的过滤器:
    1. Level过滤器:级别过滤器,根据日志级别进行过滤。如果日志级别等于配置级别,过滤器会根据onMath 和 onMismatch接收或拒绝日志
    2. ThresholdFilter:临界值过滤器,过滤掉低于指定临界值的日志。当日志级别等于或高于临界值时,过滤器返回NEUTRAL;当日志级别低于临界值时,日志会被拒绝
    3. EvaluatorFilter:求值过滤器,评估、鉴别日志是否符合指定条件。需要额外的两个JAR包,commons-compiler.jar和janino.jar。这个过滤器一般不经常使用
<!--级别过滤器,高于info的直接处理,低于info的直接拒绝--><filter class="ch.qos.logback.classic.filter.LevelFilter">     <level>INFO</level>     <onMatch>ACCEPT</onMatch>     <onMismatch>DENY</onMismatch>   </filter><!--临界值过滤器,过滤掉 TRACE 和 DEBUG 级别的日志--><filter class="ch.qos.logback.classic.filter.ThresholdFilter">     <level>INFO</level>   </filter>

logger

用来设置某一个包或者具体的某一个类的日志打印级别、以及指定。仅有一个name属性和一个可选的addtivity属性。logger里面拥有两个子节点level和appender-ref

  • name:用来指定受此loger约束的某一个包或者具体的某一个类。可以通过LoggerFacatory.getLogger(“${name}”)来获取这个Logger
  • addtivity:是否向上级loger传递打印信息,默认是true
  • level:设置打印级别,大小写无关:TRACE、DEBUG、INFO、WARN、ERROR、ALL和OFF,还有一个特殊值INHERITED或者同义词NULL,代表强制执行上级的级别。如果未设置此属性,那么当前loger将会继承上级的级别。
  • appender-ref:指定该logger中添加该appender。logger中可以包含零个或多个appender-ref元素

各个logger 都被关联到一个LoggerContext,LoggerContext负责制造logger,也负责以树结构排列各logger。如果logger的名称带上一个点号后是另外一个logger的名称的前缀,那么,前者就被称为后者的祖先

一个 logger可以被关联多个 appender。方法addAppender()为指定的logger添加一个appender。对于logger的每个启用了的记录请求,都将被发送到logger里的全部appender及更高等级的appender。换句话说,appender叠加性地继承了logger的层次等级。

root

root是一个特殊的logger元素,称为根logger。name已经被命名为”root”,只有一个level属性,指明日志级别。其它的同普通的logger一样,也可以包含多个appender