logback学习二
<?xml version="1.0" encoding="utf-8"?>
1 <configuration debug="true" scan="true" scanPeriod="2">
2 <!--TODO : 子节点信息-->
3 </configuration>
可以这样描述配置文件的基本结构:以<configuration>开头,后面有零
个或多个<appender>元素,有零个或多个<logger>元素,有最多一个<root>元素

二:<configuration> 子节点

<?xml version="1.0" encoding="utf-8"?>
1 <configuration debug="true" scan="true" scanPeriod="2">
2 <!-- conf consoel out -->
3 <appender name ="console_out" class="ch.qos.logback.core.ConsoleAppender">
4 </appender>
5
6 <!-- conf file out -->
7 <appender name="file_out" class="ch.qos.logback.core.FileAppender">
8 </appender>
9
10 <!-- conf file out -->
11 <appender name="file_out" class="ch.qos.logback.core.RollingFileAppender">
12 </appender>
13
14 <root></root>
15 <loger></loger>
16 </configuration>


1 <?xml version="1.0" encoding="utf-8"?>
2 <configuration>
3 <!-- conf consoel out -->
4 <appender name ="console_out" class="ch.qos.logback.core.ConsoleAppender">
5 <encoder>
6 <pattern>%date [%thread] %-5level %logger - %message%newline</pattern>
7 </encoder>
8 </appender>
9
10 <root level="INFO">
11 <appender-ref ref="console_out" />
12 </root>
13 </configuration>


1 <?xml version="1.0" encoding="utf-8"?>
2 <configuration>
3 <!-- conf consoel out -->
4 <appender name ="console_out" class="ch.qos.logback.core.ConsoleAppender">
5 <encoder>
6 <pattern>%date [%thread] %-5level %logger - %message%newline</pattern>
7 </encoder>
8 </appender>
9
10 <!-- conf file out -->
11 <appender name="file_out" class="ch.qos.logback.core.FileAppender">
12 <file>logs/debug.log</file>
13 <encoder>
14 <pattern>%date [%thread] %-5level %logger - %message%newline</pattern>
15 </encoder>
16 </appender>
17 </configuration>

- 1.1.3.1 :

1 <!-- 03:conf errorAppender out -->
2 <appender name="errorAppender" class="ch.qos.logback.core.RollingFileAppender">
3 <file>logs/error.log</file>
4 <!-- 设置滚动策略 -->
5 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
6 <!--设置日志命名模式-->
7 <fileNamePattern>errorFile.%d{yyyy-MM-dd}.log</fileNamePattern>
8 <!--最多保留30天log-->
9 <maxHistory>30</maxHistory>
10 </rollingPolicy>
11 <!-- 超过150MB时,触发滚动策略 -->
12 <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
13 <maxFileSize>150</maxFileSize>
14 </triggeringPolicy>
15 <encoder>
16 <pattern>%d [%p] %-5level %logger - %msg%newline</pattern>
17 </encoder>
18 </appender>

- 1.1.3.2 :
2.1 : logger 节点

1 <?xml version="1.0" encoding="utf-8"?>
2 <configuration>
3 <!-- conf consoel out -->
4 <appender name ="console_out" class="ch.qos.logback.core.ConsoleAppender">
5 <filter class="ch.qos.logback.classic.filter.LevelFilter">
6 <!-- 过滤掉非INFO级别 -->
7 <level>INFO</level>
8 <onMatch>ACCEPT</onMatch>
9 <onMismatch>DENY</onMismatch>
10 </filter>
11 </appender>
12
13 <!-- conf infoAppender out -->
14 <appender name="infoAppender" class="ch.qos.logback.core.RollingFileAppender">
15
16 <file>logs/info.log</file>
17 <!-- 设置滚动策略 -->
18 <rollingPoliy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
19 <!--设置日志命名模式-->
20 <fileNamePattern>infoFile.%d{yyyy-MM-dd}.log</fileNamePattern>
21 <!--最多保留30天log-->
22 <maxHistory>30</maxHistory>
23 </rollingPoliy>
24 <!-- 超过150MB时,触发滚动策略 -->
25 <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
26 <maxFileSize>150</maxFileSize>
27 </triggeringPolicy>
28 <encoder>
29 <pattern>%d [%p] %-5level %logger - %msg%newline</pattern>
30 </encoder>
31 </appender>
32
33 <!-- 指定在logback.olf.log包中的log -->
34 <logger name="logback.olf.log" level="info">
35 <appender-ref ref = "console_out"/>
36 <appender-ref ref = "infoAppender"/>
37 </logger>
38 </configuration>

三 : <filter> 过滤节点

1 <?xml version="1.0" encoding="utf-8"?>
2 <configuration>
3 <!-- conf consoel out -->
4 <appender name ="console_out" class="ch.qos.logback.core.ConsoleAppender">
5 <filter class="ch.qos.logback.classic.filter.LevelFilter">
6 <!-- 过滤掉非INFO级别 -->
7 <level>INFO</level>
8 <onMatch>ACCEPT</onMatch>
9 <onMismatch>DENY</onMismatch>
10 </filter>
11
12 <encoder>
13 <pattern>%-4relative [%thread] %-5level %logger{30} - %msg%n</pattern>
14 </encoder>
15 </appender>
16 <root level="DEBUG">
17 <appender-ref ref="console_out" />
18 </root>
19 </configuration>

3.2 : 临界值过滤器(ThresholdFilter)
ThresholdFilter 过滤掉低于指定临界值的事件 . 当记录的级别等于或高于临界值时 , ThresholdFilter 的decide()方法会返回NEUTRAL ; 当记录级别低于临界值时 , 事件会被拒绝 下面是个配置文件例子 :

1 <?xml version="1.0" encoding="utf-8"?>
2 <configuration>
3 <!-- conf consoel out -->
4 <appender name ="console_out" class="ch.qos.logback.core.ConsoleAppender">
5 <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<!-- 过滤掉TRACE和DEBUG级别的日志 -->
6 <level>INFO</level>
7 </filter>
8
9 <encoder>
10 <pattern>%-4relative [%thread] %-5level %logger{30} - %msg%n</pattern>
11 </encoder>
12 </appender>
13 <root level="DEBUG">
14 <appender-ref ref="console_out" />
15 </root>
16 </configuration>

3.3 : 求值过滤器(EvaluatorFilter)
EvaluatorFilter 封装了 EventEvaluator(ch.qos.logback.core.boolex.EventEvaluator) , 评估 是否符合指定的条件

1 <?xml version="1.0" encoding="utf-8"?>
2 <configuration>
3 <!-- conf consoel out -->
4 <appender name ="console_out" class="ch.qos.logback.core.ConsoleAppender">
5 <filter class="ch.qos.logback.classic.filter.EvaluatorFilter">
6 <evaluator>
7 <!--过滤掉所有日志中不包含hello字符的日志-->
8 <expression>
9 message.contains("hello")
10 </expression>
11 <onMatch>NEUTRAL</onMatch>
12 <onMismatch>DENY</onMismatch>
13 </evaluator>
14 </filter>
15
16 <encoder>
17 <pattern>%-4relative [%thread] %-5level %logger{30} - %msg%n</pattern>
18 </encoder>
19 </appender>
20 <root level="DEBUG">
21 <appender-ref ref="console_out" />
22 </root>
23 </configuration>

3.4 : 匹配器(Matchers)
尽管能通过调用 String 类的 matches()方法进行模式匹配,但这会导致每次调用过滤器 时都会创建一个全新的 Pattern 对象。为消除这种开销,你可以预先定义一个或多个 Matcher 对象。一旦定义 matcher 后,就可以在求值表达式里重复引用它。

1 <?xml version="1.0" encoding="utf-8"?>
2 <configuration>
3 <!-- conf consoel out -->
4 <appender name ="console_out" class="ch.qos.logback.core.ConsoleAppender">
5 <filter class="ch.qos.logback.classic.filter.EvaluatorFilter">
6 <evaluator>
7 <matcher>
8 <Name>odd</Name>
9 <!-- 过滤掉序号为奇数的语句-->
10 <regex>statement [13579]</regex>
11 </matcher>
12 <expression>odd.matches(formattedMessage)</expression>
13 <onMatch>NEUTRAL</onMatch>
14 <onMismatch>DENY</onMismatch>
15 </evaluator>
16 </filter>
17
18 <encoder>
19 <pattern>%-4relative [%thread] %-5level %logger{30} - %msg%n</pattern>
20 </encoder>
21 </appender>
22 <root level="DEBUG">
23 <appender-ref ref="console_out" />
24 </root>
25 </configuration>

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
可用于纪录多文件。
logback学习二的更多相关文章
- emberjs学习二(ember-data和localstorage_adapter)
emberjs学习二(ember-data和localstorage_adapter) 准备工作 首先我们加入ember-data和ember-localstorage-adapter两个依赖项,使用 ...
- ReactJS入门学习二
ReactJS入门学习二 阅读目录 React的背景和基本原理 理解React.render() 什么是JSX? 为什么要使用JSX? JSX的语法 如何在JSX中如何使用事件 如何在JSX中如何使用 ...
- TweenMax动画库学习(二)
目录 TweenMax动画库学习(一) TweenMax动画库学习(二) TweenMax动画库学习(三) Tw ...
- Hbase深入学习(二) 安装hbase
Hbase深入学习(二) 安装hbase This guidedescribes setup of a standalone hbase instance that uses the local fi ...
- Struts2框架学习(二) Action
Struts2框架学习(二) Action Struts2框架中的Action类是一个单独的javabean对象.不像Struts1中还要去继承HttpServlet,耦合度减小了. 1,流程 拦截器 ...
- Python学习二:词典基础详解
作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7862377.html 邮箱:moyi@moyib ...
- Quartz学习--二 Hello Quartz! 和源码分析
Quartz学习--二 Hello Quartz! 和源码分析 三. Hello Quartz! 我会跟着 第一章 6.2 的图来 进行同步代码编写 简单入门示例: 创建一个新的java普通工程 ...
- SpringCloud学习(二):微服务入门实战项目搭建
一.开始使用Spring Cloud实战微服务 1.SpringCloud是什么? 云计算的解决方案?不是 SpringCloud是一个在SpringBoot的基础上构建的一个快速构建分布式系统的工具 ...
- DjangoRestFramework学习二之序列化组件、视图组件 serializer modelserializer
DjangoRestFramework学习二之序列化组件.视图组件 本节目录 一 序列化组件 二 视图组件 三 xxx 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 序列化组 ...
随机推荐
- Mysql编译安装详解
wget http://mirrors.cnnic.cn/apache/httpd/mysql-5.5.20.tar.gz root@Mysql-server ~]# yum install -y c ...
- Python基础数据类型之字典
基础数据类型之字典 ps:数据类型划分:可变数据类型和不可变数据类型. 不可变数据类型:元组(tupe).布尔值(bool).整数型(int).字符串(str).不可变数据类型也称为可哈希. 可变 ...
- PV 动态供给 - 每天5分钟玩转 Docker 容器技术(153)
前面的例子中,我们提前创建了 PV,然后通过 PVC 申请 PV 并在 Pod 中使用,这种方式叫做静态供给(Static Provision). 与之对应的是动态供给(Dynamical Provi ...
- java Hibernate 处理 oracle xmltype类型
网上关于如何处理oracle xmltype类型的博客很多,我现在分享的是针对具体业务来的,我在oracle数据库entity表中detail插入了一条xmltype类型的数据 xml的详细内容如下: ...
- 【笔记】快应用QuickApp(hap) -- 构建一个微博应用
一.背景 在上次和小伙伴分享了快应用(后面简称hap)后,有很多待定的思路没有去尝试.这周有时间简单开发了一个热门微博的应用,主要涉及到的难点:富文本.长列表.画廊.这里将整个开发过程中遇到的问题以及 ...
- QT 设计师使用样式表添加背景
QT create中样式表可以用来设置背景图.背景颜色.字体大小格式颜色等 1.添加背景图的话需要先添加资源文件 右击项目文件选择添加新文件,再选择QT资源文件(QT resource file)然后 ...
- hdu1060 Leftmost Digit---求N的N次方的首位(对数)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1060 题目描述:求N的N次方的第一位. 思路: 第一次做这种类型的题目,学到了如何运用对数. 首先推 ...
- 新购阿里云服务器ECS创建之后无法ssh连接的问题处理
作者:13 GitHub:https://github.com/ZHENFENG13 版权声明:本文为原创文章,未经允许不得转载. 问题描述 由于原服务器将要到期,因此趁着阿里云搞促销活动重新购买了一 ...
- hash详解
首先介绍一下hash? 事实上是一种叫做蛤丝的病毒 hash的做法: 首先设一个进制数base,并设一个模数mod 而哈希其实就是把一个数转化为一个值,这个值是base进制的,储存在哈希表中,注意一下 ...
- [HNOI 2014]米特运输
Description 米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为主要能源的D星上,这种米特能源的运输和储 存一直是一个大问题.D星上有N个城市,我们将其顺序编号为1到N,1号城市 ...