Spring Boot使用Commons Logging进行所有内部日志记录,但保留底层日志实现。为Java Util Logging,Log4J2和 Logback提供了默认配置 。在每种情况下,记录器都预先配置为使用控制台输出,并且还提供可选的文件输出。
默认情况下,如果使用“Starters”,则使用Logback进行日志记录。还包括适当的Logback路由,以确保使用Java Util Logging,Commons Logging,Log4J或SLF4J的依赖库都能正常工作
Java有很多日志框架可供使用。如果以上列表看起来令人困惑,请不要担心。通常,您不需要更改日志记录依赖项,并且Spring Boot默认值可以正常工作。
日志格式
Spring Boot的默认日志输出类似于以下示例:

输出以下项目:
- 日期和时间:毫秒精度,易于排序。
- 日志级别:ERROR,WARN,INFO,DEBUG或TRACE。
- 进程ID。
- 一个---分隔符,用于区分实际日志消息的开头。
- 线程名称:括在方括号中(可能会截断控制台输出)。
- 记录器名称:这通常是源类名称(通常缩写)。
- 日志消息。
Logback没有FATAL级别。它映射到ERROR。
控制台输出
默认日志配置会在写入时将消息回显到控制台。默认情况下,会记录ERROR - 级别,WARN - 级别和INFO级别的消息。您还可以通过使用--debug标志启动应用程序来启用“调试”模式。
$ java -jar myapp.jar --debug
您还可以在application.properties中指定debug=true
启用调试模式后,将选择一些核心记录器(嵌入式容器,Hibernate和Spring Boot)以输出更多信息。启用调试模式并没有将应用程序配置为记录与DEBUG级别的所有消息。
或者,您可以通过使用--trace标志(或application.properties中的trace=true)启动应用程序来启用“跟踪”模式。这样做可以为选择的核心记录器(嵌入式容器,Hibernate模式生成和整个Spring组合)启用跟踪日志记录。
简而言之默认打印录ERROR - 级别,WARN - 级别和INFO级别的消息,如果想打印更多信息在application.properties中的debug=true调试模式,调试信息将会打印出来如果想追踪所以信息application.properties中的trace=true所以信息都会打印
彩色编码输出
如果您的终端支持ANSI,则使用颜色输出来提高可读性。您可以将spring.output.ansi.enabled设置为 支持的值以覆盖自动检测。
使用%clr转换字配置颜色编码。在最简单的形式中,转换器根据日志级别为输出着色,如以下示例所示:
%clr(%5p)
下表描述了日志级别默认到颜色的映射:

%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){yellow}
支持以下颜色和样式:
- blue
- cyan
- faint
- green
- magenta
- red
- yellow
文件输出
默认情况下,Spring Boot仅记录到控制台,不会写入日志文件。如果除了控制台输出之外还要编写日志文件,则需要设置logging.file或logging.path属性(例如,在application.properties中)
| logging.file.name | logging.file.path | 描述 | 实例 |
|---|---|---|---|
| 没有 | 没有 | 仅控制台记录。 | |
| 具体文件 | 没有 | 写入指定的日志文件。名称可以是精确位置或相对于当前目录文件夹不存在会自动创建。 | my.log或者 /user/log/my.log |
| 没有 | 具体目录 | 将spring.log写入指定的目录。名称可以是精确位置或相对于当前目录文件夹不存在会自动创建。 | /var/log |
注意在最新SpringBoot2.2.2 推荐使用logging.file.name和logging.file.path而logging.file和logging.path已经被淘汰,但是具体使用是一样的,主要区别是logging.file.path,只能在指定目录生成默认的文件spring.log而logging.file.name必须指定文件名否则就不会生效
日志文件在达到10 MB时会轮换,与控制台输出一样,默认情况下会记录ERROR - 级别,WARN - 级别和INFO级别的消息。可以使用logging.file.max-size属性更改大小限制。除非已设置logging.file.max-history属性,否则以前轮换的文件将无限期归档。
日志记录系统在应用程序生命周期的早期初始化。因此,在通过@PropertySource注释加载的属性文件中找不到日志记录属性。
日志记录属性独立于实际的日志记录基础结构。因此,Spring Boot不管理特定的配置密钥(例如用于Logback的logback.configurationFile)。
日志级别
所有受支持的日志记录系统都可以使用logging.level.=在Spring Environment中设置记录器级别(例如,在application.properties中),其中level是TRACE,DEBUG,INFO之一,警告,错误,致命或关闭。可以使用logging.level.root配置root记录器。
以下示例显示application.properties中的潜在日志记录设置:
logging.level.root=WARN
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR
可设的值有OFF、FATAL、ERROR、WARN、INFO DEBUG、或TRACE、ALL日志级别由高到底 您可以控制应用程序中相应级别的日志信息的开关,比如在这里设定了INFO级别,则应用程序中所有DEBUG级别的日志信息将不会被打印出来。
日志组
能够将相关记录器组合在一起以便可以同时配置它们通常很有用。例如,您通常可以更改所有 Tomcat相关记录器的日志记录级别 ,但您无法轻松记住顶级软件包。
为此,Spring Boot允许您在Spring Environment中定义日志记录组。例如,以下是如何通过将“tomcat”组添加到application.properties来定义它:
logging.group.tomcat=org.apache.catalina, org.apache.coyote, org.apache.tomcat
定义后,您可以使用一行更改组中所有记录器的级别:
logging.level.tomcat=TRACE
Spring Boot包括以下可以开箱即用的预定义日志记录组:
| 名称 | 记录仪 |
|---|---|
| web | org.springframework.core.codec, org.springframework.http, org.springframework.web |
| sql | org.springframework.jdbc.core, org.hibernate.SQL |
自定义日志配置
可以通过在类路径中包含相应的库来激活各种日志记录系统,并且可以通过在类路径的根目录中或在以下Spring Environment属性指定的位置提供合适的配置文件来进一步自定义: logging.config。
您可以使用org.springframework.boot.logging.LoggingSystem系统属性强制Spring Boot使用特定的日志记录系统。该值应该是LoggingSystem实现的完全限定类名。您还可以使用值none完全禁用Spring Boot的日志记录配置。
由于在创建ApplicationContext 之前初始化日志记录,因此无法控制Spring @Configuration文件中@PropertySources的日志记录。更改日志记录系统或完全禁用它的唯一方法是通过系统属性。
根据您的日志记录系统,将加载以下文件:
| 记录系统 | 定制 |
|---|---|
| Logback | logback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy |
| Log4j2 | log4j2-spring.xml or log4j2.xml |
| JDK (Java Util Logging) | logging.properties |
如果可能,我们建议您使用-spring变体进行日志记录配置(例如,logback-spring.xml而不是logback.xml)。如果使用标准配置位置,Spring无法完全控制日志初始化。
Java Util Logging存在已知的类加载问题,这些问题在从“可执行jar”运行时会导致问题。如果可能的话,我们建议您在从“可执行jar”运行时避免使用它。
SLF4j使用
如何在系统中使用SLF4j
以后开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法
这和我们单独使用日志jar包有所不同
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(HelloWorld.class);
logger.info("Hello World");
}
}
日志配置
SpringBoot默认帮我们配置好了日志;
日志输出格式:
%d表示日期时间,
%thread表示线程名,
%‐5level:级别从左显示5个字符宽度
%logger{50} 表示logger名字最长50个字符,否则按照句点分割。
%msg:日志消息,
%n是换行符
‐‐>
logging.pattern.console= %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level ----- %logger{50} ---> %msg%n
SpringBoot修改日志的默认配置属性文件
#指定那些包日志进行相应level打印root表示所有的包
logging.level.root=debug
logging.level.com.fashvn.ctmsdata=DEBUG
#配置日志打印控制台格式
logging.pattern.console= %d{HH:mm:ss} - %logger{50} - %msg%n
#配置日志文件内容输出格式
logging.pattern.file= %clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){yellow}%n
#指定输出到日志文件可以自己指定
logging.file.name=logs/log.log
# 指定输出到日志文件spring.log
logging.file.path=logs/out
# 指定日志文件大小默认是10M这里单位KB超过10M就会按照日期进行无限归档
logging.file.max-size=1024
#归档的日志文件数量默认是7
logging.file.max-history
# 清除历史档案默认false
logging.file.clean-history-on-start=true
#日志输出格式
logging.pattern.level=%5p