通常情况下,日志是由一个抽象层 + 实现层的组合来搭建[i]。
spring-boot-starter 其中包含了 spring-boot-starter-logging ,该依赖内容就是 Spring Boot 默认的日志框架 logback,所以实际开发中我们不需要直接添加该依赖[ii]。
因为我们需要对日志进行更多控制,所以需要增加 logback配置。
在项目的 resources 文件夹内新建一个名为 logback-spring.xml 文件。logback-spring.xml 只有在Spring应用程序运行的时候才生效,即带有@SpringBootApplication注解的类启动的时候才会生效[iii]。
logback-spring.xml配置主要包含 <configuration> 节点,在它之下有四个常用的子节点:root、contextName、property、appender。
我们一般先配置 property节点,定义好变量;接着定义控制台和文件的 appender,最后使用 root 来引用之前配置好的 appender。contextName 节点很少使用。
完整配置文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--设置存储路径变量-->
<property name="LOG_HOME" value="./log"/>
<!--控制台输出appender-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!--设置输出格式-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<!--设置编码-->
<charset>UTF-8</charset>
</encoder>
</appender>
<!--文件输出,时间窗口滚动-->
<appender name="timeFileOutput" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--日志名,指定最新的文件名,其他文件名使用FileNamePattern -->
<File>${LOG_HOME}/xx/info.log</File>
<!--文件滚动模式-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名,可设置文件类型为gz,开启文件压缩-->
<FileNamePattern>${LOG_HOME}/xx/info.%d{yyyy-MM-dd}.%i.log.gz</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>3000</MaxHistory>
<!--按大小分割同一天的-->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<!--输出格式-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<!--设置编码-->
<charset>UTF-8</charset>
</encoder>
</appender>
<!--指定基础的日志输出级别-->
<root level="INFO">
<appender-ref ref="console"/>
<appender-ref ref="timeFileOutput"/>
</root>
</configuration>
比较重要的地方是以下几点:
- 设置日志文件所在的根路径LOG_HOME;
- 设置日志输出格式pattern,其中 %logger{50} 中的 50 表示可以显示的最大字符数;
日志配置项可以根据业务工程要求进行修改,具体说明如下:
当日志文件超过单个文件最大容量时,会进行分割,形如: