LogBack實戰(Maven)

簡介

    Logback是由log4j創始人設計的又一個開源日誌組件。html

                logback當前分紅三個模塊:logback-core,logback- classic和logback-access。java

                logback-core是其它兩個模塊的基礎模塊。node

                logback-classic是log4j的一個 改良版本。此外logback-classic完整實現SLF4J API使你能夠很方便地更換成其它日誌系統如log4j或JDK14 Logging。web

                logback-access訪問模塊與Servlet容器集成提供經過Http來訪問日誌的功能。spring

 

 

導入依賴

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視頻看下系統會自動找到這個配置文件。api

 

配置文件詳解

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" ;
     }
     
}

 

測試結果

wKioL1d962iiqhT_AANPtYiPFdc668.png

相關文章
相關標籤/搜索