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按照配置顺序。下面是几种常用的过滤器:- Level过滤器:级别过滤器,根据日志级别进行过滤。如果日志级别等于配置级别,过滤器会根据onMath 和 onMismatch接收或拒绝日志
- ThresholdFilter:临界值过滤器,过滤掉低于指定临界值的日志。当日志级别等于或高于临界值时,过滤器返回NEUTRAL;当日志级别低于临界值时,日志会被拒绝
- 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
- logback配置
- Logback 配置
- logback配置
- logback配置
- logback 配置
- Logback配置
- logback 配置
- logback.配置
- LogBack配置
- logback配置
- logback配置
- logback配置
- logback配置
- logback配置
- logback配置
- Logback配置
- logback配置---Spring集成logback
- logback.xml配置
- 富文本编辑器UEditor的配置使用方法
- 82移除重复链表第二弹
- 代理模式proxy
- android存储路径
- java.lang.ClassNotFoundException: org.springframework.web.util.IntrospectorCleanupListener
- logback配置
- ubuntu14.04挂载新的硬盘
- 51nod二级算法题全部题解
- ubuntu tab键不能自动补全命令的参数
- 【数据结构----笔记5】插入排序算法之【希尔排序算法】
- laravel 服务容器service container和服务提供者service provider
- 再聊socket状态转移
- C++笔试题(二).CVTE
- 测试入门之测试阶段的划分