用slf4j+logback实现多功能日志解决方案

释放双眼,带上耳机,听听看~!

大家都知道,slf4j是原来log4j的作者写的一个新的日志组件,意思是简单日志门面接口,可以跟其他日志组件配合使用,常用的配合是slf4j+logback,无论从功能上还是从性能上都较之log4j有了很大的提升,我想很多用户都已经尝试,并应用到项目中。
对于日志记录,说实话,以前用过log4j,但没有深入研究,用其最简单的功能。有幸在项目中用到了slf4j,来解决一个稍微复杂点的日志记录需求。于是便深入研究了下,下边将自己的研究成果与大家分享:
首先描述下需要解决的问题:
比如有如下包: 
com.spike.test.a 
com.spike.test.b 
com.spike.test.c
com.spike.test.d
com.spike.test 
我的配置日志需求: 
A. com.spike.test.a的日志级别任意设置,单独一日志文件,独立的日志级别。 
B. com.spike.test.b的日志级别任意设置,单独一日志文件,独立的日志级别。 
C. com.spike.test.b的日志级别任意设置,单独一日志文件,独立的日志级别。
D. com.spike.test.b的日志级别任意设置,单独一日志文件,独立的日志级别。
E. com.spike.test的日志记录需求:
1)记录所有的info级别的日志,也就是不记录debug级别日志,单独一个日志文件,可以看到整个系统的所有info级别以上的日志记录。且该配置不受A,B,C,D,E其他配置的任何影响。
2)记录所有的error级别的日志,也就是不记录debug,info,warn级别日志,单独一个日志文件,可以看到整个系统的所有error级别日志记录。且该配置不受A,B,C,D,E其他配置的任何影响。

一 准备相关工具
1.  从网上下载slf4j组件和logback相关的jar包,很多网站都有,logback可以直接到这个网站下载http://logback.qos.ch/,http://www.slf4j.org/可以直接到这里下载http://www.slf4j.org/。总之,不管在哪里下载,你都需要找到以下几个jar包(可能根据需要,有个别不需要,这个没有详细研究,读者可以自己研究下):
1)  logback-acces-0.9.18.jar
2)  logback-classic-0.9.18.jar
3)  logback-core-0.9.18.jar
4)  slf4j-api-1.5.6.jar

  1. 准备测试环境:

1)建立一个JAVA工程,比如是LogTest,工程整体目录结构如下(csdn的博客发图很不方便,也许我不会 用,暂时描述下吧),工程根目录除了src目录外,新建一个lib目录,将上边4个jar包放入并导入工程。再新建一个config目录,用于存放日志配 置文件logback.xml,这个文件如何配置,后边再介绍。
2)建立测试类以及相关包:
包结构以及包类的文件如下:
com.spike.test.a 
TestA.java
com.spike.test.b 
TestB.java
com.spike.test.c
TestC.java
com.spike.test.d
TestD.java
com.spike.test:
Start.java
其中TestA.java类的测试代码如下,其他4个类代码类似:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1package com.spike.test.a;  
2import org.slf4j.Logger;  
3import org.slf4j.LoggerFactory;
4
5public class TestA {  
6         private static Logger log = LoggerFactory.getLogger(TestA.class);   
7         public TestA()  
8         {  
9                   log.debug("TestA-debug");  
10                   log.info("TestA-info");  
11                   log.warn("TestA-warn");  
12                   log.error("TestA-error");  
13         }  
14}
15

目的很简单,就是在构造函数中打印各种级别的log日志信息,TestB.java如下:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1package com.spike.test.b;  
2import org.slf4j.Logger;  
3import org.slf4j.LoggerFactory;
4
5public class TestB {  
6         private static Logger log = LoggerFactory.getLogger(TestB.class);   
7         public TestB()  
8         {  
9                   log.debug("TestB-debug");  
10                   log.info("TestB-info");  
11                   log.warn("TestB-warn");  
12                   log.error("TestB-error");  
13         }  
14}
15

其他2个文件就不再此列出,大家应该想得到,
启动类Start.java内容如下:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1package com.spike.test;  
2import com.spike.test.a.TestA;  
3import com.spike.test.b.TestB;  
4import com.spike.test.c.TestC;  
5import com.spike.test.d.TestD;
6
7public class Start {  
8    public static void main(String[] args) {  
9        TestA a = new TestA();  
10        TestB b = new TestB();  
11        TestC c = new TestC();  
12        TestD d = new TestD();  
13    }
14
15}
16

2.  建立logback.xml配置文件
前面说过了,在config目录下建立了logback.xml文件,但文件内容没有介绍,下边说说:
先介绍最简单的一个配置,如配置文件内容如下:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1<?xml version="1.0" encoding="UTF-8" ?>  
2<configuration>   
3    <appender name="a" class="ch.qos.logback.core.rolling.RollingFileAppender">  
4       <File>./log/mylog_a_debug.log</File>  
5       <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">  
6         <FileNamePattern>./log/mylog_a_debug.%i.log</FileNamePattern>      
7         <MinIndex>1</MinIndex>      
8         <MaxIndex>5</MaxIndex>      
9       </rollingPolicy>    
10       <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">    
11         <MaxFileSize>5MB</MaxFileSize>      
12       </triggeringPolicy>    
13       <layout class="ch.qos.logback.classic.PatternLayout">    
14        <Pattern>%date [%thread] %-5level %logger{80} - %msg%n</Pattern>      
15       </layout>    
16    </appender>  
17 <logger name="com.spike.test.a" level="DEBUG">    
18     <appender-ref ref="a" />  
19 </logger>  
20 </configuration> 
21

配置的意思是把com.spike.test.a包下的debug级别的日志全部记录到这个日志文件./log /mylog_a_debug.log中。一个appender代表一个具体的日志配置项目,可以通过name属性的名字在logger节点中通过 appender-ref引用。具体不细说。
下边运行下配置结果,看是否跟我们想的一致。
运行前,先要配置个启动参数,,否则日志直接到控制台了,在ECLIPSE启动参数里加入如下代码:
-Dlogback.configurationFile=./config/logback.xml
这个主要是告诉系统日志配置文件放在哪里。
启动程序运行!
然后到跟/log/目录下,我们会看到有一个新的文件mylog_a_debug.log,打开看到内容如下:


1
2
3
4
5
12009-12-27 09:19:30,718 [main] DEBUG com.spike.test.a.TestA - TestA-debug  
22009-12-27 09:19:30,718 [main] INFO  com.spike.test.a.TestA - TestA-info  
32009-12-27 09:19:30,718 [main] WARN  com.spike.test.a.TestA - TestA-warn  
42009-12-27 09:19:30,718 [main] ERROR com.spike.test.a.TestA - TestA-error  
5

正好实现我们的简单需求。

3.  根据我们的真实需求,修改logback.xml文件:
对于A,B,C,D4个日志配置需求,很简单,直接参考刚才的配置,拷贝三份,修改相关参数就可以实现,这里不再赘述,可以在后边的配置文件中看到配置。
下边重点说说需求E的配置:
1) E配置的第一个需求:记录所有的info级别的日志,也就是不记录debug级别日志,单独一个日志文件,可以看到整个系统的所有info级别以上的日志记录。且该配置不受A,B,C,D,E其他配置的任何影响,我们按常规的配置思路。
首先增加root节点配置,如下:


1
2
3
4
1<root>    
2     <appender-ref ref="all_info" level="INFO" />     
3</root> 
4

然后增加all_info对应的appender节点的配置,如下:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1    <appender name="all_info" class="ch.qos.logback.core.rolling.RollingFileAppender">  
2       <File>./log/mylog_all_info.log</File>  
3       <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">  
4         <FileNamePattern>./log/mylog_all_info.%i.log</FileNamePattern>      
5         <MinIndex>1</MinIndex>      
6         <MaxIndex>5</MaxIndex>      
7       </rollingPolicy>    
8       <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">    
9         <MaxFileSize>5MB</MaxFileSize>      
10       </triggeringPolicy>    
11       <layout class="ch.qos.logback.classic.PatternLayout">    
12        <Pattern>%date [%thread] %-5level %logger{80} - %msg%n</Pattern>      
13       </layout>    
14    </appender>  
15

 
2)  E配置的第2个需求:记录所有的error级别的日志,也就是不记录debug,info,warn级别日志,单独一个日志文件,可以看到整个系统的所有error级别日志记录。且该配置不受A,B,C,D,E其他配置的任何影响,我们参考第一个需求配置如下:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1<root>    
2     <appender-ref ref="all_info" level="INFO" />   
3    <appender-ref ref="all_error" level="error" />      
4 </root>    
5    <appender name="all_error" class="ch.qos.logback.core.rolling.RollingFileAppender">  
6       <File>./log/mylog_all_error.log</File>  
7       <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">  
8         <FileNamePattern>./log/mylog_all_error.%i.log</FileNamePattern>      
9         <MinIndex>1</MinIndex>      
10         <MaxIndex>5</MaxIndex>      
11       </rollingPolicy>    
12       <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">    
13         <MaxFileSize>5MB</MaxFileSize>      
14       </triggeringPolicy>    
15       <layout class="ch.qos.logback.classic.PatternLayout">    
16        <Pattern>%date [%thread] %-5level %logger{80} - %msg%n</Pattern>      
17       </layout>    
18</appender>
19

 OK,全部配置完了,整个logback.xml的配置文件如下:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
1<?xml version="1.0" encoding="UTF-8" ?>  
2<configuration>  
3    <appender name="all_error" class="ch.qos.logback.core.rolling.RollingFileAppender">  
4       <File>./log/mylog_all_error.log</File>  
5       <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">  
6         <FileNamePattern>./log/mylog_all_error.%i.log</FileNamePattern>      
7         <MinIndex>1</MinIndex>      
8         <MaxIndex>5</MaxIndex>      
9       </rollingPolicy>    
10       <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">    
11         <MaxFileSize>5MB</MaxFileSize>      
12       </triggeringPolicy>    
13       <layout class="ch.qos.logback.classic.PatternLayout">    
14        <Pattern>%date [%thread] %-5level %logger{80} - %msg%n</Pattern>      
15       </layout>    
16    </appender>
17
18    <appender name="all_info" class="ch.qos.logback.core.rolling.RollingFileAppender">  
19       <File>./log/mylog_all_info.log</File>  
20       <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">  
21         <FileNamePattern>./log/mylog_all_info.%i.log</FileNamePattern>      
22         <MinIndex>1</MinIndex>      
23         <MaxIndex>5</MaxIndex>      
24       </rollingPolicy>    
25       <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">    
26         <MaxFileSize>5MB</MaxFileSize>      
27       </triggeringPolicy>    
28       <layout class="ch.qos.logback.classic.PatternLayout">    
29        <Pattern>%date [%thread] %-5level %logger{80} - %msg%n</Pattern>      
30       </layout>    
31    </appender>     
32    <appender name="a" class="ch.qos.logback.core.rolling.RollingFileAppender">  
33       <File>./log/mylog_a_debug.log</File>  
34       <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">  
35         <FileNamePattern>./log/mylog_a_debug.%i.log</FileNamePattern>      
36         <MinIndex>1</MinIndex>      
37         <MaxIndex>5</MaxIndex>      
38       </rollingPolicy>    
39       <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">    
40         <MaxFileSize>5MB</MaxFileSize>      
41       </triggeringPolicy>    
42       <layout class="ch.qos.logback.classic.PatternLayout">    
43        <Pattern>%date [%thread] %-5level %logger{80} - %msg%n</Pattern>      
44       </layout>    
45    </appender>  
46     <appender name="b" class="ch.qos.logback.core.rolling.RollingFileAppender">  
47       <File>./log/mylog_b_info.log</File>  
48       <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">  
49         <FileNamePattern>./log/mylog_b_info.%i.log</FileNamePattern>      
50         <MinIndex>1</MinIndex>      
51         <MaxIndex>5</MaxIndex>      
52       </rollingPolicy>    
53       <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">    
54         <MaxFileSize>5MB</MaxFileSize>      
55       </triggeringPolicy>    
56       <layout class="ch.qos.logback.classic.PatternLayout">    
57        <Pattern>%date [%thread] %-5level %logger{80} - %msg%n</Pattern>      
58       </layout>    
59    </appender>  
60    <appender name="c" class="ch.qos.logback.core.rolling.RollingFileAppender">  
61       <File>./log/mylog_c_warn.log</File>  
62       <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">  
63         <FileNamePattern>./log/mylog_c_warn.%i.log</FileNamePattern>      
64         <MinIndex>1</MinIndex>      
65         <MaxIndex>5</MaxIndex>      
66       </rollingPolicy>    
67       <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">    
68         <MaxFileSize>5MB</MaxFileSize>      
69       </triggeringPolicy>    
70       <layout class="ch.qos.logback.classic.PatternLayout">    
71        <Pattern>%date [%thread] %-5level %logger{80} - %msg%n</Pattern>      
72       </layout>    
73    </appender>  
74    <appender name="d" class="ch.qos.logback.core.rolling.RollingFileAppender">  
75       <File>./log/mylog_d_error.log</File>  
76       <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">  
77         <FileNamePattern>./log/mylog_c_error.%i.log</FileNamePattern>      
78         <MinIndex>1</MinIndex>      
79         <MaxIndex>5</MaxIndex>      
80       </rollingPolicy>    
81      <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">    
82         <MaxFileSize>5MB</MaxFileSize>      
83       </triggeringPolicy>    
84       <layout class="ch.qos.logback.classic.PatternLayout">    
85        <Pattern>%date [%thread] %-5level %logger{80} - %msg%n</Pattern>      
86       </layout>    
87    </appender>  
88 <logger name="com.spike.test.a" level="DEBUG">    
89     <appender-ref ref="a" />  
90 </logger>  
91 <logger name="com.spike.test.b" level="INFO">    
92     <appender-ref ref="b" />  
93 </logger>  
94 <logger name="com.spike.test.c" level="warn">    
95     <appender-ref ref="c" />  
96 </logger>  
97  <logger name="com.spike.test.d" level="error">    
98     <appender-ref ref="d" />  
99 </logger>  
100 <root>    
101     <appender-ref ref="all_info" level="INFO" />   
102     <appender-ref ref="all_error" level="error" />      
103 </root>    
104 </configuration> 
105

下边我们运行下,看是否正确。
我检查了下A,B,C,D需求很简单,都能满足需求,分别输出了该包下的所有DEBUG日志,info日志,warn日志,error日志。但是对于E需求问题来了,我看了下mylog_all_error.log文件内容如下:


1
2
3
4
5
6
7
8
9
10
11
12009-12-27 09:33:47,156 [main] DEBUG com.spike.test.a.TestA - TestA-debug  
22009-12-27 09:33:47,171 [main] INFO  com.spike.test.a.TestA - TestA-info  
32009-12-27 09:33:47,171 [main] WARN  com.spike.test.a.TestA - TestA-warn  
42009-12-27 09:33:47,171 [main] ERROR com.spike.test.a.TestA - TestA-error  
52009-12-27 09:33:47,171 [main] INFO  com.spike.test.b.TestB - TestB-info  
62009-12-27 09:33:47,171 [main] WARN  com.spike.test.b.TestB - TestB-warn  
72009-12-27 09:33:47,171 [main] ERROR com.spike.test.b.TestB - TestB-error  
82009-12-27 09:33:47,171 [main] WARN  com.spike.test.c.TestC - TestC-warn  
92009-12-27 09:33:47,171 [main] ERROR com.spike.test.c.TestC - TestC-error  
102009-12-27 09:33:47,187 [main] ERROR com.spike.test.d.TestD - TestD-error  
11

也 就是说,<appender-ref ref="all_error" level="error" />  这个配置根本没有效果,而且这里输出的实际是各个子包配置结果的总和。再看看mylog_all_info.log文件,内容也是跟 mylog_all_error.log文件内容一样,配置失败。
后边经过反复实验,还是达不到需求。于是在网上,搜索找答案,论坛发贴,在一个csdn朋友的指引下,我到http://logback.qos.ch/manual/filters.html 这个是logback的官方网站,里边详细的介绍,不看不知道,一看吓一跳,内容真丰富,功能真强大,经过认真研究,终于把问题解决,过程不在细说,主要 是通过logback组件的filter来解决,logback提供的filter组件很多,多种类型,而且可以自己定义,实现它的接口即可,功能真是强 大,而且可配置能力强。
下边说说解决方法:
对于E配置的第一个需求,在其对应的appender配置里增加这个子节点:


1
2
3
4
1        &lt;filter class=&quot;ch.qos.logback.classic.filter.ThresholdFilter&quot;&gt;  
2          &lt;level&gt;INFO&lt;/level&gt;  
3        &lt;/filter&gt;  
4

这个配置官方网站提供的注释原文如下:


1
2
1&lt;!-- deny all events with a level below INFO, that is TRACE and DEBUG --&gt;
2

意思是拒绝那些所有的级别在info以下用于跟踪和调式的事件。呵呵,后边的that is TRACE and DEBUG是一个定语从句,对a level进行解释。
对于E配置的第二个需求,在其对应的appender配置里增加这个子节点:


1
2
3
4
5
6
1       &lt;filter class=&quot;ch.qos.logback.classic.filter.LevelFilter&quot;&gt;  
2          &lt;level&gt;ERROR&lt;/level&gt;  
3          &lt;onMatch&gt;ACCEPT&lt;/onMatch&gt;  
4          &lt;onMismatch&gt;DENY&lt;/onMismatch&gt;  
5        &lt;/filter&gt;  
6

这个filter又不一样,意思是用于日志级别过滤。
比如这里配置了level级别为ERROR, onMatch表示匹配如何处理,可以根据需求设置接受或拒绝,onMismatch表示不匹配如何处理,具体自行可以设置。
Ok,配置完成。整个logback.xml配置文件内容如下:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
1&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt;  
2&lt;configuration&gt;  
3    &lt;appender name=&quot;all_error&quot; class=&quot;ch.qos.logback.core.rolling.RollingFileAppender&quot;&gt;  
4       &lt;filter class=&quot;ch.qos.logback.classic.filter.LevelFilter&quot;&gt;  
5          &lt;level&gt;ERROR&lt;/level&gt;  
6          &lt;onMatch&gt;ACCEPT&lt;/onMatch&gt;  
7          &lt;onMismatch&gt;DENY&lt;/onMismatch&gt;  
8        &lt;/filter&gt;  
9       &lt;File&gt;./log/mylog_all_error.log&lt;/File&gt;  
10       &lt;rollingPolicy class=&quot;ch.qos.logback.core.rolling.FixedWindowRollingPolicy&quot;&gt;  
11         &lt;FileNamePattern&gt;./log/mylog_all_error.%i.log&lt;/FileNamePattern&gt;      
12         &lt;MinIndex&gt;1&lt;/MinIndex&gt;      
13         &lt;MaxIndex&gt;5&lt;/MaxIndex&gt;      
14       &lt;/rollingPolicy&gt;    
15       &lt;triggeringPolicy class=&quot;ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy&quot;&gt;    
16         &lt;MaxFileSize&gt;5MB&lt;/MaxFileSize&gt;      
17       &lt;/triggeringPolicy&gt;    
18       &lt;layout class=&quot;ch.qos.logback.classic.PatternLayout&quot;&gt;    
19        &lt;Pattern&gt;%date [%thread] %-5level %logger{80} - %msg%n&lt;/Pattern&gt;      
20       &lt;/layout&gt;    
21    &lt;/appender&gt;   
22    &lt;appender name=&quot;all_info&quot; class=&quot;ch.qos.logback.core.rolling.RollingFileAppender&quot;&gt;  
23        &lt;filter class=&quot;ch.qos.logback.classic.filter.ThresholdFilter&quot;&gt;  
24          &lt;level&gt;INFO&lt;/level&gt;  
25        &lt;/filter&gt;  
26       &lt;File&gt;./log/mylog_all_info.log&lt;/File&gt;  
27       &lt;rollingPolicy class=&quot;ch.qos.logback.core.rolling.FixedWindowRollingPolicy&quot;&gt;  
28         &lt;FileNamePattern&gt;./log/mylog_all_info.%i.log&lt;/FileNamePattern&gt;      
29         &lt;MinIndex&gt;1&lt;/MinIndex&gt;      
30         &lt;MaxIndex&gt;5&lt;/MaxIndex&gt;      
31       &lt;/rollingPolicy&gt;    
32       &lt;triggeringPolicy class=&quot;ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy&quot;&gt;    
33         &lt;MaxFileSize&gt;5MB&lt;/MaxFileSize&gt;      
34       &lt;/triggeringPolicy&gt;    
35       &lt;layout class=&quot;ch.qos.logback.classic.PatternLayout&quot;&gt;    
36        &lt;Pattern&gt;%date [%thread] %-5level %logger{80} - %msg%n&lt;/Pattern&gt;      
37       &lt;/layout&gt;    
38    &lt;/appender&gt;     
39    &lt;appender name=&quot;a&quot; class=&quot;ch.qos.logback.core.rolling.RollingFileAppender&quot;&gt;  
40       &lt;File&gt;./log/mylog_a_debug.log&lt;/File&gt;  
41       &lt;rollingPolicy class=&quot;ch.qos.logback.core.rolling.FixedWindowRollingPolicy&quot;&gt;  
42         &lt;FileNamePattern&gt;./log/mylog_a_debug.%i.log&lt;/FileNamePattern&gt;      
43         &lt;MinIndex&gt;1&lt;/MinIndex&gt;      
44         &lt;MaxIndex&gt;5&lt;/MaxIndex&gt;      
45       &lt;/rollingPolicy&gt;    
46       &lt;triggeringPolicy class=&quot;ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy&quot;&gt;    
47         &lt;MaxFileSize&gt;5MB&lt;/MaxFileSize&gt;      
48       &lt;/triggeringPolicy&gt;    
49       &lt;layout class=&quot;ch.qos.logback.classic.PatternLayout&quot;&gt;    
50        &lt;Pattern&gt;%date [%thread] %-5level %logger{80} - %msg%n&lt;/Pattern&gt;      
51       &lt;/layout&gt;    
52    &lt;/appender&gt;  
53      
54     &lt;appender name=&quot;b&quot; class=&quot;ch.qos.logback.core.rolling.RollingFileAppender&quot;&gt;  
55       &lt;File&gt;./log/mylog_b_info.log&lt;/File&gt;  
56       &lt;rollingPolicy class=&quot;ch.qos.logback.core.rolling.FixedWindowRollingPolicy&quot;&gt;  
57         &lt;FileNamePattern&gt;./log/mylog_b_info.%i.log&lt;/FileNamePattern&gt;      
58         &lt;MinIndex&gt;1&lt;/MinIndex&gt;      
59         &lt;MaxIndex&gt;5&lt;/MaxIndex&gt;      
60       &lt;/rollingPolicy&gt;    
61       &lt;triggeringPolicy class=&quot;ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy&quot;&gt;    
62         &lt;MaxFileSize&gt;5MB&lt;/MaxFileSize&gt;      
63       &lt;/triggeringPolicy&gt;    
64       &lt;layout class=&quot;ch.qos.logback.classic.PatternLayout&quot;&gt;    
65        &lt;Pattern&gt;%date [%thread] %-5level %logger{80} - %msg%n&lt;/Pattern&gt;      
66       &lt;/layout&gt;    
67    &lt;/appender&gt;  
68      
69   &lt;appender name=&quot;c&quot; class=&quot;ch.qos.logback.core.rolling.RollingFileAppender&quot;&gt;  
70       &lt;File&gt;./log/mylog_c_warn.log&lt;/File&gt;  
71       &lt;rollingPolicy class=&quot;ch.qos.logback.core.rolling.FixedWindowRollingPolicy&quot;&gt;  
72         &lt;FileNamePattern&gt;./log/mylog_c_warn.%i.log&lt;/FileNamePattern&gt;      
73         &lt;MinIndex&gt;1&lt;/MinIndex&gt;      
74         &lt;MaxIndex&gt;5&lt;/MaxIndex&gt;      
75       &lt;/rollingPolicy&gt;    
76       &lt;triggeringPolicy class=&quot;ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy&quot;&gt;    
77         &lt;MaxFileSize&gt;5MB&lt;/MaxFileSize&gt;      
78       &lt;/triggeringPolicy&gt;    
79       &lt;layout class=&quot;ch.qos.logback.classic.PatternLayout&quot;&gt;    
80        &lt;Pattern&gt;%date [%thread] %-5level %logger{80} - %msg%n&lt;/Pattern&gt;      
81       &lt;/layout&gt;    
82    &lt;/appender&gt;  
83      
84    &lt;appender name=&quot;d&quot; class=&quot;ch.qos.logback.core.rolling.RollingFileAppender&quot;&gt;  
85       &lt;File&gt;./log/mylog_d_error.log&lt;/File&gt;  
86       &lt;rollingPolicy class=&quot;ch.qos.logback.core.rolling.FixedWindowRollingPolicy&quot;&gt;  
87         &lt;FileNamePattern&gt;./log/mylog_c_error.%i.log&lt;/FileNamePattern&gt;      
88         &lt;MinIndex&gt;1&lt;/MinIndex&gt;      
89         &lt;MaxIndex&gt;5&lt;/MaxIndex&gt;      
90       &lt;/rollingPolicy&gt;    
91       &lt;triggeringPolicy class=&quot;ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy&quot;&gt;    
92         &lt;MaxFileSize&gt;5MB&lt;/MaxFileSize&gt;      
93       &lt;/triggeringPolicy&gt;    
94       &lt;layout class=&quot;ch.qos.logback.classic.PatternLayout&quot;&gt;    
95        &lt;Pattern&gt;%date [%thread] %-5level %logger{80} - %msg%n&lt;/Pattern&gt;      
96       &lt;/layout&gt;    
97    &lt;/appender&gt;
98
99 &lt;logger name=&quot;com.spike.test.a&quot; level=&quot;DEBUG&quot;&gt;    
100     &lt;appender-ref ref=&quot;a&quot; /&gt;  
101 &lt;/logger&gt;  
102   
103 &lt;logger name=&quot;com.spike.test.b&quot; level=&quot;INFO&quot;&gt;    
104     &lt;appender-ref ref=&quot;b&quot; /&gt;  
105 &lt;/logger&gt;  
106   
107 &lt;logger name=&quot;com.spike.test.c&quot; level=&quot;warn&quot;&gt;    
108     &lt;appender-ref ref=&quot;c&quot; /&gt;  
109 &lt;/logger&gt;  
110   
111  &lt;logger name=&quot;com.spike.test.d&quot; level=&quot;error&quot;&gt;    
112     &lt;appender-ref ref=&quot;d&quot; /&gt;  
113 &lt;/logger&gt;  
114 &lt;root&gt;    
115     &lt;appender-ref ref=&quot;all_info&quot; level=&quot;INFO&quot; /&gt;   
116     &lt;appender-ref ref=&quot;all_error&quot; /&gt;      
117 &lt;/root&gt;    
118 &lt;/configuration&gt;    
119
120

运行最后结果查看:
mylog_all_error.log文件内容如下:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
12009-12-27 09:51:40,875 [main] ERROR com.spike.test.a.TestA - TestA-error  
22009-12-27 09:51:40,875 [main] ERROR com.spike.test.b.TestB - TestB-error  
32009-12-27 09:51:40,890 [main] ERROR com.spike.test.c.TestC - TestC-error  
42009-12-27 09:51:40,890 [main] ERROR com.spike.test.d.TestD - TestD-error  
5OK,全部ERROR都输出,满足需求。  
6mylog_all_info.log文件内容如下:  
72009-12-27 09:51:40,875 [main] INFO  com.spike.test.a.TestA - TestA-info  
82009-12-27 09:51:40,875 [main] WARN  com.spike.test.a.TestA - TestA-warn  
92009-12-27 09:51:40,875 [main] ERROR com.spike.test.a.TestA - TestA-error  
102009-12-27 09:51:40,875 [main] INFO  com.spike.test.b.TestB - TestB-info  
112009-12-27 09:51:40,875 [main] WARN  com.spike.test.b.TestB - TestB-warn  
122009-12-27 09:51:40,875 [main] ERROR com.spike.test.b.TestB - TestB-error  
132009-12-27 09:51:40,875 [main] WARN  com.spike.test.c.TestC - TestC-warn  
142009-12-27 09:51:40,890 [main] ERROR com.spike.test.c.TestC - TestC-error  
152009-12-27 09:51:40,890 [main] ERROR com.spike.test.d.TestD - TestD-error  
16

Ok,不再有DEBUG级别的日志了。满足需求。
再检查下A,B,C,D需求,都已经实现。

给TA打赏
共{{data.count}}人
人已打赏
安全经验

Google Adsense 技巧提示100条

2021-10-11 16:36:11

安全经验

安全咨询服务

2022-1-12 14:11:49

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索