大家都知道,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)建立一个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 <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
2 <level>INFO</level>
3 </filter>
4
这个配置官方网站提供的注释原文如下:
1
2 1<!-- deny all events with a level below INFO, that is TRACE and DEBUG -->
2
意思是拒绝那些所有的级别在info以下用于跟踪和调式的事件。呵呵,后边的that is TRACE and DEBUG是一个定语从句,对a level进行解释。
对于E配置的第二个需求,在其对应的appender配置里增加这个子节点:
1
2
3
4
5
6 1 <filter class="ch.qos.logback.classic.filter.LevelFilter">
2 <level>ERROR</level>
3 <onMatch>ACCEPT</onMatch>
4 <onMismatch>DENY</onMismatch>
5 </filter>
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<?xml version="1.0" encoding="UTF-8" ?>
2<configuration>
3 <appender name="all_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
4 <filter class="ch.qos.logback.classic.filter.LevelFilter">
5 <level>ERROR</level>
6 <onMatch>ACCEPT</onMatch>
7 <onMismatch>DENY</onMismatch>
8 </filter>
9 <File>./log/mylog_all_error.log</File>
10 <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
11 <FileNamePattern>./log/mylog_all_error.%i.log</FileNamePattern>
12 <MinIndex>1</MinIndex>
13 <MaxIndex>5</MaxIndex>
14 </rollingPolicy>
15 <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
16 <MaxFileSize>5MB</MaxFileSize>
17 </triggeringPolicy>
18 <layout class="ch.qos.logback.classic.PatternLayout">
19 <Pattern>%date [%thread] %-5level %logger{80} - %msg%n</Pattern>
20 </layout>
21 </appender>
22 <appender name="all_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
23 <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
24 <level>INFO</level>
25 </filter>
26 <File>./log/mylog_all_info.log</File>
27 <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
28 <FileNamePattern>./log/mylog_all_info.%i.log</FileNamePattern>
29 <MinIndex>1</MinIndex>
30 <MaxIndex>5</MaxIndex>
31 </rollingPolicy>
32 <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
33 <MaxFileSize>5MB</MaxFileSize>
34 </triggeringPolicy>
35 <layout class="ch.qos.logback.classic.PatternLayout">
36 <Pattern>%date [%thread] %-5level %logger{80} - %msg%n</Pattern>
37 </layout>
38 </appender>
39 <appender name="a" class="ch.qos.logback.core.rolling.RollingFileAppender">
40 <File>./log/mylog_a_debug.log</File>
41 <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
42 <FileNamePattern>./log/mylog_a_debug.%i.log</FileNamePattern>
43 <MinIndex>1</MinIndex>
44 <MaxIndex>5</MaxIndex>
45 </rollingPolicy>
46 <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
47 <MaxFileSize>5MB</MaxFileSize>
48 </triggeringPolicy>
49 <layout class="ch.qos.logback.classic.PatternLayout">
50 <Pattern>%date [%thread] %-5level %logger{80} - %msg%n</Pattern>
51 </layout>
52 </appender>
53
54 <appender name="b" class="ch.qos.logback.core.rolling.RollingFileAppender">
55 <File>./log/mylog_b_info.log</File>
56 <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
57 <FileNamePattern>./log/mylog_b_info.%i.log</FileNamePattern>
58 <MinIndex>1</MinIndex>
59 <MaxIndex>5</MaxIndex>
60 </rollingPolicy>
61 <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
62 <MaxFileSize>5MB</MaxFileSize>
63 </triggeringPolicy>
64 <layout class="ch.qos.logback.classic.PatternLayout">
65 <Pattern>%date [%thread] %-5level %logger{80} - %msg%n</Pattern>
66 </layout>
67 </appender>
68
69 <appender name="c" class="ch.qos.logback.core.rolling.RollingFileAppender">
70 <File>./log/mylog_c_warn.log</File>
71 <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
72 <FileNamePattern>./log/mylog_c_warn.%i.log</FileNamePattern>
73 <MinIndex>1</MinIndex>
74 <MaxIndex>5</MaxIndex>
75 </rollingPolicy>
76 <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
77 <MaxFileSize>5MB</MaxFileSize>
78 </triggeringPolicy>
79 <layout class="ch.qos.logback.classic.PatternLayout">
80 <Pattern>%date [%thread] %-5level %logger{80} - %msg%n</Pattern>
81 </layout>
82 </appender>
83
84 <appender name="d" class="ch.qos.logback.core.rolling.RollingFileAppender">
85 <File>./log/mylog_d_error.log</File>
86 <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
87 <FileNamePattern>./log/mylog_c_error.%i.log</FileNamePattern>
88 <MinIndex>1</MinIndex>
89 <MaxIndex>5</MaxIndex>
90 </rollingPolicy>
91 <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
92 <MaxFileSize>5MB</MaxFileSize>
93 </triggeringPolicy>
94 <layout class="ch.qos.logback.classic.PatternLayout">
95 <Pattern>%date [%thread] %-5level %logger{80} - %msg%n</Pattern>
96 </layout>
97 </appender>
98
99 <logger name="com.spike.test.a" level="DEBUG">
100 <appender-ref ref="a" />
101 </logger>
102
103 <logger name="com.spike.test.b" level="INFO">
104 <appender-ref ref="b" />
105 </logger>
106
107 <logger name="com.spike.test.c" level="warn">
108 <appender-ref ref="c" />
109 </logger>
110
111 <logger name="com.spike.test.d" level="error">
112 <appender-ref ref="d" />
113 </logger>
114 <root>
115 <appender-ref ref="all_info" level="INFO" />
116 <appender-ref ref="all_error" />
117 </root>
118 </configuration>
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需求,都已经实现。