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级别日志扫描的目录。

posted @ 2019-10-10 16:58  V吾将上下而求索V  阅读(855)  评论(0编辑  收藏  举报