概述
SpringBoot应用的一个最大特点就是去配置化,日志系统也不例外。默认情况下,你不做任何配置,只要引入相关依赖,就可以在控制台看到日志的输出,当然也可以在配置文件简单配置就能改变日志输出的行为。本文主要通过SpringBoot 2.7.0版本讲解默认日志输出的相关配置以及如何使用。
简单使用
- 引入相关依赖
项目工程中引入下面的依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> <version>2.7.0</version> </dependency>
一般的web引用都会自动引入该依赖,不需要手动引入。
- 添加日志
@SpringBootApplication @Slf4j public class LogApplication { public static void main( String[] args ) { SpringApplication.run(LogApplication.class, args); log.trace("Trace 日志..."); log.debug("Debug 日志..."); log.info("Info 日志..."); log.warn("Warn 日志..."); log.error("Error 日志..."); } }
启动类中添加验证日志,得到输出结果:
- 小结
- 默认情况下,不做任何配置,日志仅仅输出到控制台中。
- 日志级别从小到大为 trace < debug < info < warn < error < fatal,由于默认日志级别设置为 INFO,因此上面样例 trace 和 debug 级别的日志都看不到。
我们可以通过一些配置项,改变这种默认行为。
日志相关配置
- 修改日志级别 logging.level
只需要在配置文件中通过 logging.level 包名
的形式可以精细化控制各个不同包日志的输出级别,也可以通过logging.level.root
全局修改日志级别。日志级别可以配置下面6个: trace < debug < info < warn < error < fatal。
结果:
- 日志分组logging.group
日志如果包很多的话,对每个相同类别的包设置级别会很麻烦,好在日志系统有个日志分组功能。比如按照模块,我们用户模块的包归为一组,然后统一修改这个组的日志。
// 设置分组 logging.group.user=com.alvinlkk.user,com.alvinlkk.person // 对分组修改日志级别 logging.level.user=debug
SpringBoot给我们内置了两个分组web 和 sql,如下:
- 日志输出到文件中logging.file.name
如果你想将日志输出到文件,可以通过如下配置指定日志文件名:
logging.file.name=logdemo.log
logging.file.name 可以只指定日志文件名,也可以指定日志文件全路径,例如下面这样:
logging.file.name=/Users/alvin/Documents/javaboy/logdemo.log
运行结果:
- 日志输出到目录中logging.file.path
如果你只是想重新定义输出日志文件的路径,也可以使用 logging.file.path 属性, 生成的文件名为spring.log, 如果同时配置了logging.file.path和logging.file.name,logging.file.path配置会失效。
logging.file.path=/Users/alvin/CodeRepo/Person/springboot-demo/springboot-03-log
- 修改日志输出格式
logging.pattern.console
修改控制台的日志输出格式。
logging.pattern.file
修改文件中的日志输出格式。
# 修改在控制台输出的日志格式 logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger : %msg%n # 修改输出到文件的日志格式 logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger : %msg%n
符号说明:
%d{HH:mm:ss.SSS}:日志输出时间
%-5level:日志级别,并且使用 5 个字符靠左对齐
%thread:输出日志的进程名字,这在 Web 应用以及异步任务处理中很有用
%logger:日志输出者的名字
%msg:日志消息
%n:平台的换行符
- 归档相关的日志
归档配置 | 说明 | 默认值 |
logging.logback.rollingpolicy.clean-history-on-start | 是否在启动时清理归档日志文件。 | false |
logging.logback.rollingpolicy.file-name-pattern | 归档日志文件名的模式。 | ${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz |
logging.logback.rollingpolicy.max-file-size | 单个文件最大日志文件大小 | 10MB |
logging.logback.rollingpolicy.max-history | 要保存的存档日志文件的最大数量 | 7 |
logging.logback.rollingpolicy.total-size-cap | 日志文件被删除之前,可以容纳的最大大小 | 0B |
actuator查看日志
配置了logging.file.name后,日志内容也可以通过actuator的端点查看。
- 引入actuator相关的jar
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
- 配置暴露所有的断点
management.endpoints.web.exposure.include=*
- 查看日志内容
浏览器输入地址http://localhost:8080/actuator/logfile 可以查看日志内容,如下图:
总结
虽然默认的的日志实现很方便,但是有一些局限性,只能实现对日志一些非常简单的配置,如果想实现更加细粒度的日志配置,那就需要使用日志实现的原生配置,例如 Logback 的 classpath:logback.xml,Log4j 的 classpath:log4j.xml 等。