引入依赖
核心jar包
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
因为spring boot 默认集成log back 作为日志处理组件,spring-boot-starter
或者spring-boot-starter-web
依赖jar
包中已经包含了spring-boot-starter-logging
的依赖,所以 spring-boot不需要额外引用。
如果使用的是 log4j2 需要排除spring boot默认日志logback。
添加配置文件
logback-spring.xml
Logback可以有以下几种文件格式:logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
Spring Boot 官方推荐优先使用带有 -spring 的文件名作为你的日志配置(如使用 logback-spring.xml ,而不是 logback.xml ),命名为 logback-spring.xml 的日志配置文件, spring boot 可以为它添加一些 spring boot 特有的配置项,如多环境日志输出。
代码实操
-
引入依赖(使用spring-boot-starter)
-
创建logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"> <!--设置存储路径变量--> <property name="LOG_HOME" value="./log"/> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <Property name="LOG_PATTERN" value="%d{yyyy-MM-dd hh:mm:ss.SSS} | %-5level | [%t] |%logger{50} | %L | : %msg%n"/> <!--控制台输出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>${LOG_PATTERN}</pattern> <!--设置编码--> <charset>UTF-8</charset> </encoder> </appender> <!--文件输出,时间窗口滚动--> <appender name="infoFileOutput" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!--日志名,指定最新的文件名,其他文件名使用FileNamePattern --> <File>${LOG_HOME}/timeFile/out.log</File> <!--文件滚动模式--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日志文件输出的文件名,可设置文件类型为gz,开启文件压缩--> <FileNamePattern>${LOG_HOME}/timeFile/%d{yyyy-MM-dd}/history.%i.log</FileNamePattern> <!--日志文件保留天数--> <MaxHistory>30</MaxHistory> <!--按大小分割同一天的--> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>100MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <!--输出格式--> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>${LOG_PATTERN}</pattern> <!--设置编码--> <charset>UTF-8</charset> </encoder> </appender> <!--err的日志单独放--> <appender name="errFileOutput" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!--日志名,指定最新的文件名,其他文件名使用FileNamePattern --> <File>${LOG_HOME}/timeFile/err.log</File> <!--文件滚动模式--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日志文件输出的文件名,可设置文件类型为gz,开启文件压缩--> <FileNamePattern>${LOG_HOME}/timeFile/%d{yyyy-MM-dd}/err_history.%i.log</FileNamePattern> <!--日志文件保留天数--> <MaxHistory>30</MaxHistory> <!--按大小分割同一天的--> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>100MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <!--输出格式--> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>${LOG_PATTERN}</pattern> <!--设置编码--> <charset>UTF-8</charset> </encoder> <!--只过滤err级别的日志--> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--指定基础的日志输出级别--> <root level="INFO"> <!--appender将会添加到这个loger--> <appender-ref ref="console"/> <appender-ref ref="infoFileOutput"/> <appender-ref ref="errFileOutput"/> </root> </configuration>
-
测试
在logs文件夹下生成日志文件
多环境日志输出
通过设置文件名为-spring 结尾,可分环境配置 logger,示例如下:
<configuration>
<!-- 测试环境+开发环境. 多个使用逗号隔开. -->
<springProfile name="test,dev">
<logger name="com.example.demo.controller" level="DEBUG" additivity="false">
<appender-ref ref="console"/>
</logger>
</springProfile>
<!-- 生产环境. -->
<springProfile name="prod">
<logger name="com.example.demo" level="INFO" additivity="false">
<appender-ref ref="timeFileOutput"/>
</logger>
</springProfile>
</configuration>
通过配置spring.profiles.active
也能做到切换上面的 logger 打印设置.
参考
springboot超级详细的日志配置(基于logback) - 云+社区 - 腾讯云 (tencent.com)
沉寂在夜的黑暗中,等待黎明的到来