一、SpringBoot对日志框架的统一处理
导入SpringBoot启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
默认使用spring-boot-starter-logging做日志依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
底层依赖关系如下图,它已经将log4j、jul、jcl进行偷天换日,使用了slf4j替换包将其替换
总结:
-
SpringBoot底层也是使用slf4j+logback的方式进行日志记录。
-
SpringBoot也把其他的日志都替换成了slf4j。
-
如果我们要引入其他框架,一定要把这个框架的默认日志依赖移除掉。例如,Spring框架用的是commons-logging
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
二、SpringBoot日志设置
- 日志级别由低到高:trace、debug、info、warning、error。
- SpringBoot的默认日志级别为info,调整日志级别的方法为:在application.propositions文件中进行调整:logging.level.包名(.类名)=级别A--->调整某个包(类)的最低日志级别为A。
- 修改默认日志配置:
logging.file | logging.path | Example | Description |
(none) | (none) | 只在控制台输出 | |
指定文件名 | (none) | my.log | 输出日志到my.log文件 |
(none) | 指定目录 | /var/log | 输出到指定目录的spring.log文件中 |
logging.file=springboot.log 不指定路径,在当前项目下生成名为springboot.log的日志
logging.file=E:/springboot.log 指定完整的路径,在E盘下生成名为springboot.log的日志
logging.path=/spring/log 在当前项目磁盘的根路径下创建spring文件夹和里面的log文件夹;使用
spring.log作为默认文件
指定在控制台输出的日志的格式
logging.pattern.console=%d{yyyy‐MM‐dd} [%thread] %‐5level %logger{50} ‐ %msg%n
指定文件中日志输出的格式
logging.pattern.file=%d{yyyy‐MM‐dd} ===[%thread] ===%‐5level ===%logger{50} ====%msg%n
日志输出格式参照:
%d-->表示日期时间,
%thread-->表示线程名,
%‐5level-->级别从左显示5个字符宽度
%logger{50} -->表示logger名字最长50个字符,否则按照句点分割。
%msg-->日志消息,%n是换行符
%d{yyyy‐MM‐dd HH:mm:ss.SSS} [%thread] %‐5level %logger{50} ‐ %msg%n
- 自定义日志配置
1 给类路径下放上每个日志框架自己的配置文件,SpringBoot将不使用默认配置
日志框架 | 配置文件 |
Logback | logback-spring.xml,logback-spring.groovy,logback.xml ,logback.groovy |
Log4j2 | log4j2-spring.xml,log4j2.xml |
JDK (Java UtilLogging) | logging.properties |
2 如果直接使用logback-spring.xml为文件名,日志框架就不会直接加载日志的配置项,而是由SpringBoot解析日志配置,可以使用SpringBoot的高级Profile功能:
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<!--可以指定某段配置只在某个环境下生效-->
<!--生产环境生效-->
<springProfile name="dev">
<pattern>%d{yyyy‐MM‐dd HH:mm:ss.SSS} ‐‐‐‐> [%thread] ‐‐‐> %‐5level%logger{50} ‐ %msg%n</pattern>
</springProfile>
<!--非生产环境生效-->
<springProfile name="!dev">
<pattern>%d{yyyy‐MM‐dd HH:mm:ss.SSS} ==== [%thread] ==== %‐5level%logger{50} ‐ %msg%n
</pattern>
</springProfile>
</layout>
</appender>
如果直接使用logback.xml为文件名,它将直接被日志框架识别,如果继续使用profile功能,会有以下错误:
no applicable action for [springProfile]