一 :根节点 <configuration></configuration>
12 3
可以这样描述配置文件的基本结构:以<configuration>开头,后面有零
个或多个<appender>元素,有零个或多个<logger>元素,有最多一个<root>元素
二:<configuration> 子节点
12 3 4 5 6 78 9 10 1112 13 1415 16
1 23 4 5 9 106 8%date [%thread] %-5level %logger - %message%newline 711 1312
1 23 4 5 9 10 116 8%date [%thread] %-5level %logger - %message%newline 712 17logs/debug.log 1314 16%date [%thread] %-5level %logger - %message%newline 15
- 1.1.3.1 :
1 23 logs/error.log 4 56 7 11 12errorFile.%d{yyyy-MM-dd}.log 8 930 1013 15150 1416 18%d [%p] %-5level %logger - %msg%newline 17
- 1.1.3.2 :
2.1 : logger 节点
1 23 4 5 12 13 146 7 11INFO 8ACCEPT 9DENY 1015 16 32 33 34logs/info.log 17 1819 20 24 25infoFile.%d{yyyy-MM-dd}.log 21 2230 2326 28150 2729 31%d [%p] %-5level %logger - %msg%newline 3035 3836 37
1 23 4 5 12 13 146 7 11INFO 8ACCEPT 9DENY 1015 16 32 33 34logs/info.log 17 1819 20 24 25infoFile.%d{yyyy-MM-dd}.log 21 2230 2326 28150 2729 31%d [%p] %-5level %logger - %msg%newline 3035 51 52 53logs/debug.log 36 3738 39 43 44debugFile.%d{yyyy-MM-dd}.log 40 4130 4245 47150 4648 50%d [%p] %-5level %logger - %msg%newline 4954 70 71logs/error.log 55 5657 58 62 63errorFile.%d{yyyy-MM-dd}.log 59 6030 6164 66150 6567 69%d [%p] %-5level %logger - %msg%newline 6872 7673 74 75
三 : <filter> 过滤节点
1 23 4 5 166 7 11 12INFO 8ACCEPT 9DENY 1013 15%-4relative [%thread] %-5level %logger{30} - %msg%n 1417 1918
3.2 : 临界值过滤器(ThresholdFilter)
ThresholdFilter 过滤掉低于指定临界值的事件 . 当记录的级别等于或高于临界值时 , ThresholdFilter 的decide()方法会返回NEUTRAL ; 当记录级别低于临界值时 , 事件会被拒绝 下面是个配置文件例子 :
1 23 4 5 136 8 9INFO 710 12%-4relative [%thread] %-5level %logger{30} - %msg%n 1114 1615
3.3 : 求值过滤器(EvaluatorFilter)
EvaluatorFilter 封装了 EventEvaluator(ch.qos.logback.core.boolex.EventEvaluator) , 评估 是否符合指定的条件
1 23 4 5 206 15 167 8 149 message.contains("hello")10 11NEUTRAL 12DENY 1317 19%-4relative [%thread] %-5level %logger{30} - %msg%n 1821 2322
3.4 : 匹配器(Matchers)
尽管能通过调用 String 类的 matches()方法进行模式匹配,但这会导致每次调用过滤器 时都会创建一个全新的 Pattern 对象。为消除这种开销,你可以预先定义一个或多个 Matcher 对象。一旦定义 matcher 后,就可以在求值表达式里重复引用它。
1 23 4 5 226 17 187 168 12odd 9 10statement [13579] 11odd.matches(formattedMessage) 13NEUTRAL 14DENY 1519 21%-4relative [%thread] %-5level %logger{30} - %msg%n 2023 2524
logback 执行流程 :
1 : 获得过滤链的策略
依据过滤器链返回的结果做出不同的响应。共有三个响应结果:
FilterReply.DENY, 直接退出,不执行后续流程FilterReply.NEUTRA,继续向下执行FilterReply.ACCEPT,不进行步骤二,即类型输出类型检查2 : 执行基本的选择规则
主要是比较下level,如果级别低直接退出后续执行
3 : 创建LoggingEvent对象
这个对象包裹一些基本信息,包括日志界别,信息本身,可能的异常信息,执行时间,执行线程,其实一些随日志请求一起发出的数据和MDC。其中MDC是用来装一些额外的上下文信息的。
4 : 调用appenders
此时logback会调用appender的doAppender,如果appender里有一些filer的话,此时也会调用
5 : 格式化输出结果
通常情况下都是由layout层将event格式化成String型。当然也有意外比如说SocketAppender就是将event格式化成流。
6 : .输出LoggingEvent
将格式化好的结果,输出到appender中记录的地址
注 : 标准logback .xml 配置 详见楼主另一篇博文
http://www.cnblogs.com/DeepLearing/p/5664941.html
可用于纪录多文件。