Spring Boot 日志組件logback實現日志分級打印


准備工作

環境:

1 windows
2 jdk 8
3 maven 3.0
4 IDEA

構建工程

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 3          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 4     <modelVersion>4.0.0</modelVersion>
 5 
 6     <parent>
 7         <groupId>cn.zhangbox</groupId>
 8         <artifactId>spring-boot-study</artifactId>
 9         <version>1.0-SNAPSHOT</version>
10     </parent>
11 
12     <groupId>cn.zhangbox</groupId>
13     <artifactId>spring-boot-log</artifactId>
14     <version>0.0.1-SNAPSHOT</version>
15     <packaging>jar</packaging>
16 
17     <name>spring-boot-logging</name>
18     <description>Demo project for Spring Boot</description>
19 
20     <properties>
21         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
22         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
23         <java.version>1.8</java.version>
24     </properties>
25 
26     <dependencies>
27         <dependency>
28             <groupId>org.springframework.boot</groupId>
29             <artifactId>spring-boot-starter-web</artifactId>
30         </dependency>
31 
32         <dependency>
33             <groupId>org.springframework.boot</groupId>
34             <artifactId>spring-boot-starter-test</artifactId>
35             <scope>test</scope>
36         </dependency>
37     </dependencies>
38 
39     <build>
40         <plugins>
41             <plugin>
42                 <groupId>org.springframework.boot</groupId>
43                 <artifactId>spring-boot-maven-plugin</artifactId>
44             </plugin>
45         </plugins>
46     </build>
47 
48 </project>

修改YML配置

 1 #選擇哪一個環境的配置
 2 #這里可以在每個環境配置redis,數據庫(mysql),消息(kafka)等相關的組件的配置
 3 spring:
 4   profiles:
 5     active: dev
 6 
 7 #文檔塊區分為三個---
 8 ---
 9 server:
10   port: 8081
11 spring:
12   profiles: dev
13 #日志
14 logging:
15 #日志配置文件位置
16   config: classpath:log/logback.xml
17 #日志打印位置,這里是默認在項目根路徑下
18   path: log/spring-boot-log
19 
20 #文檔塊區分為三個---
21 ---
22 server:
23   port: 8082
24 spring:
25   profiles: test
26 #日志
27 logging:
28 #日志配置文件位置
29   config: classpath:log/logback.xml
30 #日志打印位置,這里是默認在項目根路徑下
31   path: usr/spring-boot/log/spring-boot-log
32 
33 #文檔塊區分為三個---
34 ---
35 server:
36   port: 8083
37 spring:
38   profiles: prod
39 #日志
40 logging:
41 #日志配置文件位置
42   config: classpath:log/logback.xml
43 #日志打印位置,這里是默認在項目根路徑下
44   path: usr/spring-boot/log/spring-boot-log

創建日志配置文件

在工程resources文件夾下新建文件夾log,並在該文件夾下創建logback.xml文件,加入以下配置:

  1 <!-- Logback configuration. See http://logback.qos.ch/manual/index.html -->
  2         <configuration scan="true" scanPeriod="10 seconds">
  3             <!--繼承spring boot提供的logback配置-->
  4             <!--<include resource="org/springframework/boot/logging/logback/base.xml" />-->
  5         
  6             <!--設置系統日志目錄-->
  7             <property name="APP_DIR" value="spring-boot-log"/>
  8         
  9             <!-- 彩色日志 -->
 10             <!-- 彩色日志依賴的渲染類 -->
 11             <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
 12             <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
 13             <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
 14             <!-- 彩色日志格式 -->
 15             <property name="CONSOLE_LOG_PATTERN"
 16                       value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
 17         
 18             <!-- 控制台輸出 -->
 19             <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
 20                 <encoder>
 21                     <Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
 22                     <charset>UTF-8</charset> <!-- 此處設置字符集 -->
 23                 </encoder>
 24                 <!--此日志appender是為開發使用,只配置最底級別,控制台輸出的日志級別是大於或等於此級別的日志信息-->
 25                 <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
 26                     <level>debug</level>
 27                 </filter>
 28             </appender>
 29         
 30             <!-- 時間滾動輸出 level為 DEBUG 日志 -->
 31             <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
 32                 <!-- 正在記錄的日志文件的路徑及文件名 -->
 33                 <file>${LOG_PATH}/log_debug.log</file>
 34                 <!--日志文件輸出格式-->
 35                 <encoder>
 36                     <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
 37                     <charset>UTF-8</charset> <!-- 此處設置字符集 -->
 38                 </encoder>
 39                 <!-- 日志記錄器的滾動策略,按日期,按大小記錄 -->
 40                 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
 41                     <!--
 42                         歸檔的日志文件的路徑,例如今天是2017-04-26日志,當前寫的日志文件路徑為file節點指定,可以將此文件與file指定文件路徑設置為不同路徑,從而將當前日志文件或歸檔日志文件置不同的目錄。
 43                         而2017-04-26的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引
 44                     -->
 45                     <fileNamePattern>${LOG_PATH}/debug/log-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
 46                     <!--
 47                         除按日志記錄之外,還配置了日志文件不能超過500M,若超過500M,日志文件會以索引0開始,
 48                         命名日志文件,例如log-error-2017-04-26.0.log
 49                     -->
 50                     <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
 51                         <maxFileSize>500MB</maxFileSize>
 52                     </timeBasedFileNamingAndTriggeringPolicy>
 53                     <!--日志文件保留天數-->
 54                     <maxHistory>30</maxHistory>
 55                 </rollingPolicy>
 56                 <!-- 此日志文件只記錄debug級別的 -->
 57                 <filter class="ch.qos.logback.classic.filter.LevelFilter">
 58                     <level>debug</level>
 59                     <onMatch>ACCEPT</onMatch>
 60                     <onMismatch>DENY</onMismatch>
 61                 </filter>
 62             </appender>
 63         
 64             <!-- 時間滾動輸出 level為 INFO 日志 -->
 65             <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
 66                 <!-- 正在記錄的日志文件的路徑及文件名 -->
 67                 <file>${LOG_PATH}/log_info.log</file>
 68                 <!--日志文件輸出格式-->
 69                 <encoder>
 70                     <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
 71                     <charset>UTF-8</charset> <!-- 此處設置字符集 -->
 72                 </encoder>
 73                 <!-- 日志記錄器的滾動策略,按日期,按大小記錄 -->
 74                 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
 75                     <!--
 76                         歸檔的日志文件的路徑,例如今天是2017-04-26日志,當前寫的日志文件路徑為file節點指定,可以將此文件與file指定文件路徑設置為不同路徑,從而將當前日志文件或歸檔日志文件置不同的目錄。
 77                         而2017-04-26的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引
 78                     -->
 79                     <fileNamePattern>${LOG_PATH}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
 80                     <!--
 81                         除按日志記錄之外,還配置了日志文件不能超過500M,若超過500M,日志文件會以索引0開始,
 82                         命名日志文件,例如log-error-2017-04-26.0.log
 83                     -->
 84                     <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
 85                         <maxFileSize>500MB</maxFileSize>
 86                     </timeBasedFileNamingAndTriggeringPolicy>
 87                     <!--日志文件保留天數-->
 88                     <maxHistory>30</maxHistory>
 89                 </rollingPolicy>
 90                 <!-- 此日志文件只記錄info級別的 -->
 91                 <filter class="ch.qos.logback.classic.filter.LevelFilter">
 92                     <level>info</level>
 93                     <onMatch>ACCEPT</onMatch>
 94                     <onMismatch>DENY</onMismatch>
 95                 </filter>
 96             </appender>
 97         
 98             <!-- 時間滾動輸出 level為 WARN 日志 -->
 99             <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
100                 <!-- 正在記錄的日志文件的路徑及文件名 -->
101                 <file>${LOG_PATH}/log_warn.log</file>
102                 <!--日志文件輸出格式-->
103                 <encoder>
104                     <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
105                     <charset>UTF-8</charset> <!-- 此處設置字符集 -->
106                 </encoder>
107                 <!-- 日志記錄器的滾動策略,按日期,按大小記錄 -->
108                 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
109                     <!--
110                         歸檔的日志文件的路徑,例如今天是2017-04-26日志,當前寫的日志文件路徑為file節點指定,可以將此文件與file指定文件路徑設置為不同路徑,從而將當前日志文件或歸檔日志文件置不同的目錄。
111                         而2017-04-26的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引
112                     -->
113                     <fileNamePattern>${LOG_PATH}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
114                     <!--
115                         除按日志記錄之外,還配置了日志文件不能超過500M,若超過500M,日志文件會以索引0開始,
116                         命名日志文件,例如log-error-2017-04-26.0.log
117                     -->
118                     <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
119                         <maxFileSize>500MB</maxFileSize>
120                     </timeBasedFileNamingAndTriggeringPolicy>
121                     <!--日志文件保留天數-->
122                     <maxHistory>30</maxHistory>
123                 </rollingPolicy>
124                 <!-- 此日志文件只記錄warn級別的 -->
125                 <filter class="ch.qos.logback.classic.filter.LevelFilter">
126                     <level>warn</level>
127                     <onMatch>ACCEPT</onMatch>
128                     <onMismatch>DENY</onMismatch>
129                 </filter>
130             </appender>
131         
132             <!-- 時間滾動輸出 level為 ERROR 日志 -->
133             <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
134                 <!-- 正在記錄的日志文件的路徑及文件名 -->
135                 <file>${LOG_PATH}/log_error.log</file>
136                 <!--日志文件輸出格式-->
137                 <encoder>
138                     <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
139                     <charset>UTF-8</charset> <!-- 此處設置字符集 -->
140                 </encoder>
141                 <!-- 日志記錄器的滾動策略,按日期,按大小記錄 -->
142                 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
143                     <!--
144                         歸檔的日志文件的路徑,例如今天是2017-04-26日志,當前寫的日志文件路徑為file節點指定,可以將此文件與file指定文件路徑設置為不同路徑,從而將當前日志文件或歸檔日志文件置不同的目錄。
145                         而2017-04-26的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引
146                     -->
147                     <fileNamePattern>${LOG_PATH}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
148                     <!--
149                         除按日志記錄之外,還配置了日志文件不能超過500M,若超過500M,日志文件會以索引0開始,
150                         命名日志文件,例如log-error-2017-04-26.0.log
151                     -->
152                     <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
153                         <maxFileSize>500MB</maxFileSize>
154                     </timeBasedFileNamingAndTriggeringPolicy>
155                     <!--日志文件保留天數-->
156                     <maxHistory>30</maxHistory>
157                 </rollingPolicy>
158                 <!-- 此日志文件只記錄ERROR級別的 -->
159                 <filter class="ch.qos.logback.classic.filter.LevelFilter">
160                     <level>error</level>
161                     <onMatch>ACCEPT</onMatch>
162                     <onMismatch>DENY</onMismatch>
163                 </filter>
164             </appender>
165         
166             <logger name="org.springframework.web" level="info"/>
167             <logger name="org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor" level="INFO"/>
168             <logger name="cn.zhangbox.springboot" level="debug"/>
169         
170             <!--開發環境:打印控制台-->
171             <springProfile name="dev">
172                 <root level="info">
173                     <appender-ref ref="CONSOLE"/>
174                     <appender-ref ref="DEBUG_FILE"/>
175                     <appender-ref ref="INFO_FILE"/>
176                     <appender-ref ref="WARN_FILE"/>
177                     <appender-ref ref="ERROR_FILE"/>
178                 </root>
179             </springProfile>
180         
181             <!--測試環境:打印控制台和輸出到文件-->
182             <springProfile name="test">
183                 <root level="info">
184                     <appender-ref ref="CONSOLE"/>
185                     <appender-ref ref="INFO_FILE"/>
186                     <appender-ref ref="WARN_FILE"/>
187                     <appender-ref ref="ERROR_FILE"/>
188                 </root>
189             </springProfile>
190         
191             <!--生產環境:輸出到文件-->
192             <springProfile name="prod">
193                 <root level="error">
194                     <appender-ref ref="CONSOLE"/>
195                     <appender-ref ref="DEBUG_FILE"/>
196                     <appender-ref ref="INFO_FILE"/>
197                     <appender-ref ref="ERROR_FILE"/>
198                 </root>
199             </springProfile>
200         
201         </configuration>

注意loback配置文件中

1 <logger name="cn.zhangbox.springboot" level="debug"/>

name的屬性值一定要是當前工程的java代碼的完整目錄,因為mybatis打印的日志級別是debug級別的,因此需要配置debug級別日志掃描的目錄。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM