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