簡介
Logback是由log4j創始人設計的又一個開源日志組件。
logback當前分成三個模塊:logback-core,logback- classic和logback-access。
logback-core是其它兩個模塊的基礎模塊。
logback-classic是log4j的一個 改良版本。此外logback-classic完整實現SLF4J API使你可以很方便地更換成其它日志系統如log4j或JDK14 Logging。
logback-access訪問模塊與Servlet容器集成提供通過Http來訪問日志的功能。
導入依賴
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>
1.7
.
7
</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>
1.1
.
3
</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-access</artifactId>
<version>
1.1
.
3
</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>
1.1
.
3
</version>
</dependency>
|
配置文件位置
logback的配置文件都放在/src/main/resource/文件夾下的logback.xml文件中。放置好了之后,如果不明白的話,可以找一些Java視頻看下系統會自動找到這個配置文件。
配置文件詳解
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
|
<?xml version=
"1.0"
encoding=
"UTF-8"
?>
<!-- 級別從高到低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL -->
<!-- 日志輸出規則 根據當前ROOT 級別,日志輸出時,級別高於root默認的級別時 會輸出 -->
<!-- 以下 每個配置的 filter 是過濾掉輸出文件里面,會出現高級別文件,依然出現低級別的日志信息,通過filter 過濾只記錄本級別的日志 -->
<!-- scan 當此屬性設置為
true
時,配置文件如果發生改變,將會被重新加載,默認值為
true
。 -->
<!-- scanPeriod 設置監測配置文件是否有修改的時間間隔,如果沒有給出時間單位,默認單位是毫秒。當scan為
true
時,此屬性生效。默認的時間間隔為
1
分鍾。 -->
<!-- debug 當此屬性設置為
true
時,將打印出logback內部日志信息,實時查看logback運行狀態。默認值為
false
。 -->
<configuration scan=
"true"
scanPeriod=
"60 seconds"
debug=
"false"
>
<!-- 動態日志級別 -->
<jmxConfigurator />
<!-- 定義日志文件 輸出位置 -->
<property name=
"log_dir"
value=
"myCat_log"
/>
<!-- 日志最大的歷史
30
天 -->
<property name=
"maxHistory"
value=
"30"
/>
<!-- ConsoleAppender 控制台輸出日志 -->
<appender name=
"console"
class
=
"ch.qos.logback.core.ConsoleAppender"
>
<encoder>
<pattern>
<!-- 設置日志輸出格式 -->
%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n
</pattern>
</encoder>
</appender>
<!-- ERROR級別日志 -->
<!-- 滾動記錄文件,先將日志記錄到指定文件,當符合某個條件時,將日志記錄到其他文件 RollingFileAppender -->
<appender name=
"ERROR"
class
=
"ch.qos.logback.core.rolling.RollingFileAppender"
>
<!-- 過濾器,只記錄WARN級別的日志 -->
<!-- 果日志級別等於配置級別,過濾器會根據onMath 和 onMismatch接收或拒絕日志。 -->
<filter
class
=
"ch.qos.logback.classic.filter.LevelFilter"
>
<!-- 設置過濾級別 -->
<level>ERROR</level>
<!-- 用於配置符合過濾條件的操作 -->
<onMatch>ACCEPT</onMatch>
<!-- 用於配置不符合過濾條件的操作 -->
<onMismatch>DENY</onMismatch>
</filter>
<!-- 最常用的滾動策略,它根據時間來制定滾動策略.既負責滾動也負責出發滾動 -->
<rollingPolicy
class
=
"ch.qos.logback.core.rolling.TimeBasedRollingPolicy"
>
<!--日志輸出位置 可相對、和絕對路徑 -->
<fileNamePattern>
${log_dir}/error/%d{yyyy-MM-dd}/error-log.log
</fileNamePattern>
<!-- 可選節點,控制保留的歸檔文件的最大數量,超出數量就刪除舊文件假設設置每個月滾動,且<maxHistory>是
6
, 則只保存最近
6
個月的文件,刪除之前的舊文件。注意,刪除舊文件是,那些為了歸檔而創建的目錄也會被刪除 -->
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>
<!-- 設置日志輸出格式 -->
%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n
</pattern>
</encoder>
</appender>
<!-- WARN級別日志 appender -->
<appender name=
"WARN"
class
=
"ch.qos.logback.core.rolling.RollingFileAppender"
>
<!-- 過濾器,只記錄WARN級別的日志 -->
<!-- 果日志級別等於配置級別,過濾器會根據onMath 和 onMismatch接收或拒絕日志。 -->
<filter
class
=
"ch.qos.logback.classic.filter.LevelFilter"
>
<!-- 設置過濾級別 -->
<level>WARN</level>
<!-- 用於配置符合過濾條件的操作 -->
<onMatch>ACCEPT</onMatch>
<!-- 用於配置不符合過濾條件的操作 -->
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy
class
=
"ch.qos.logback.core.rolling.TimeBasedRollingPolicy"
>
<!--日志輸出位置 可相對、和絕對路徑 -->
<fileNamePattern>${log_dir}/warn/%d{yyyy-MM-dd}/warn-log.log</fileNamePattern>
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<!-- INFO級別日志 appender -->
<appender name=
"INFO"
class
=
"ch.qos.logback.core.rolling.RollingFileAppender"
>
<filter
class
=
"ch.qos.logback.classic.filter.LevelFilter"
>
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy
class
=
"ch.qos.logback.core.rolling.TimeBasedRollingPolicy"
>
<fileNamePattern>${log_dir}/info/%d{yyyy-MM-dd}/info-log.log</fileNamePattern>
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<!-- DEBUG級別日志 appender -->
<appender name=
"DEBUG"
class
=
"ch.qos.logback.core.rolling.RollingFileAppender"
>
<filter
class
=
"ch.qos.logback.classic.filter.LevelFilter"
>
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy
class
=
"ch.qos.logback.core.rolling.TimeBasedRollingPolicy"
>
<fileNamePattern>${log_dir}/debug/%d{yyyy-MM-dd}/debug-log.log</fileNamePattern>
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<!-- TRACE級別日志 appender -->
<appender name=
"TRACE"
class
=
"ch.qos.logback.core.rolling.RollingFileAppender"
>
<filter
class
=
"ch.qos.logback.classic.filter.LevelFilter"
>
<level>TRACE</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy
class
=
"ch.qos.logback.core.rolling.TimeBasedRollingPolicy"
>
<fileNamePattern>${log_dir}/trace/%d{yyyy-MM-dd}/trace-log.log</fileNamePattern>
<maxHistory>${maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<!-- root級別 DEBUG -->
<root>
<!-- 打印debug級別日志及以上級別日志 -->
<level value=
"debug"
/>
<!-- 控制台輸出 -->
<appender-ref ref=
"console"
/>
<!-- 文件輸出 -->
<appender-ref ref=
"ERROR"
/>
<appender-ref ref=
"INFO"
/>
<appender-ref ref=
"WARN"
/>
<appender-ref ref=
"DEBUG"
/>
<appender-ref ref=
"TRACE"
/>
</root>
</configuration>
|
使用案例
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
|
package
com.mycat.manager.controller.test;
import
org.slf4j.Logger;
import
org.slf4j.LoggerFactory;
import
org.springframework.stereotype.Controller;
import
org.springframework.web.bind.annotation.RequestMapping;
import
org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping
(
"test"
)
public
class
TestController {
private
final
Logger logger = LoggerFactory.getLogger(
this
.getClass());
/**
* logback測試
*/
@RequestMapping
(
"logbackTest"
)
@ResponseBody
public
String toBase() {
logger.debug(
"輸出debug級別的日志....."
);
logger.info(
"輸出info級別的日志....."
);
logger.error(
"輸出error級別的日志....."
);
return
"logbackTest"
;
}
}
|