默认情况下,SpringBoot内部使用logback作为系统日志实现的框架,将日志输出到控制台,不会写到日志文件。如果在application.properties或application.yml配置,这样只能配置简单的场景,保存路径、日志格式等。复杂的场景(区分 info 和 error 的日志、每天产生一个日志文件等)满足不了,只能自定义配置文件logback-spring.xml。
日志记录器(Logger)的行为是分等级的,日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出。
默认情况下,SpringBoot内部使用logback作为系统日志实现的框架,将日志输出到控制台,不会写到日志文件。Spring boot从控制台打印出来的日志级别默认只有INFO及以上级别,可以在application.properties中修改日志级别logging.level.root=WARN。
SpringBoot默认配置好了日志, 只要启动 Spring Boot 项目就会在控制台输出日志信息。
从上图可以看到,日志输出的内容如下:
时间日期:精确到毫秒
日志级别:ERROR,WARN,INFO,DEBUG,TRACE
进程ID:
分隔符:— 标识实际日志的开始
线程名:方括号括起来(可能会截断控制台输出)
Logger名:通常使用源代码的类名
日志内容:
# 格式化,只输出日期和内容
logging.pattern.console= "%d -%p -%m" %n
打印参数:
%m 输出代码中指定的消息
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“\\r\\n”,Unix平台为“\\n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比 如%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2018年6月15日22:10:28,921
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。
Spring Boot为我们提供了很多默认的日志配置,所以,只要将spring-boot-starter-logging作为依赖加入到pom.xml,则“开箱即用”。实际开发中我们不需要直接添加该依赖,你会发现spring-boot-starter其中包含了 spring-boot-starter-logging,该依赖内容就是 Spring Boot 默认的日志框架 logback。
org.springframework.boot
spring-boot-starter-logging
Spring Boot中默认配置INFO、WARN和ERROR级别的日志只输出到控制台。
我们可以在application.properties中修改日志级别logging.level.root=WARN,这样核心Logger(包含嵌入式容器、hibernate、spring)会输出更多内容,还有自己应用的日志就会输出为DEBUG级别。
①使用application.properties默认配置
默认情况下,Spring Boot将日志输出到控制台,不会写到日志文件。如果要编写除控制台输出之外的日志文件,则需在application.properties中设置logging.file或logging.path属性。
logging.file:设置文件,可以是绝对路径,也可以是相对路径。如:logging.file=my.log
logging.path:设置目录,会在该目录下创建spring.log文件,并写入日志内容,如:logging.path=/var/log
如果只配置 logging.file,会在项目的当前路径下生成一个 xxx.log 日志文件;
如果只配置 logging.path,在 /var/log文件夹生成一个日志文件为 spring.log。
注:二者不能同时使用,如若同时使用,则只有logging.file生效
默认情况下,日志文件的大小达到10MB时会切分一次,产生新的日志文件,默认级别为:ERROR、WARN、INFO。
②使用logback-spring.xml自定义配置
如果在application.properties或application.yml配置,这样只能配置简单的场景,保存路径、日志格式等。复杂的场景(区分 info 和 error 的日志、每天产生一个日志文件等)满足不了,只能自定义logback配置,SpringBoot官方推荐使用logback-spring.xml作为logback框架的自定义日志配置文件。
SpringBoot工程自带 logback和 slf4j的依赖,所以重点放在编写配置文件上:
application.properties或 application.yml (系统层面)
logback-spring.xml(自定义文件方式)
第一种方式比较简单,可做的事情也比较简单,比如:只能配置日志文件的输出路径、日志文件的格式、日志的级别等。
第二种方式比较复杂,对日志的处理比较好,生产上推荐这种,运行维护好。如有以下需求:
a、区分 debug、info、error 等类型的日志,并分别输出到不同的日志文件。
b、对日志文件进行维护,如每天产生一个日志文件,并设置日志文件的大小和保留天数等。
由于日志服务一般都在ApplicationContext创建前就初始化了,它并不是必须通过Spring的配置文件控制。因此通过系统属性和传统的Spring Boot外部配置文件依然可以很好的支持日志控制和管理。在类路径下放置自定义日志配置xml文件,SpringBoot就不会使用它本身的默认日志配置了。
下图是SpringBoot官方文档的提示内容,意思是:根据您的日志记录系统,将加载相应的文件使用。即如果我们使用logback日志框架,那么可以使用logback-spring.xml、logback-spring.groovy、logback.xml、logback.groovy之一作为配置文件来加载。
根据不同的日志系统,你可以按如下规则组织配置文件名,并且放在src/main/resources下面就能被正确加载:
SpringBoot官方推荐使用logback-spring.xml作为logback框架的自定义日志配置文件(例如:使用logback-spring.xml而不是logback.xml),因为带-spring后缀的配置文件可以使用SpringBoot提供的一些高级功能,如profile多环境日志输出。
将所有日志都存储在一个文件中文件大小也随着应用的运行越来越大并且不好排查问题,正确的做法应该是将 error日志和其他系统输出日志分开,并且不同级别的日志根据时间段进行记录存储。
在 src/main/resources 下创建 logback-spring.xml 文件,分开记录系统输出日志和Error日志:
${CONSOLE_LOG_PATTERN}
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
${DEV_FILE_PATH}/output-%d{yyyy-MM-dd}.log
10MB
60
a
2GB
ERROR
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
${DEV_FILE_PATH}/error-%d{yyyy-MM-dd}.log
10MB
60
2GB
Appender是负责写日志的组件,设置日志信息的去向,常用的有以下几个:
ch.qos.logback.core.ConsoleAppender (控制台)
ch.qos.logback.core.rolling.RollingFileAppender (文件大小到达指定尺寸的时候产生一个新文件)
ch.qos.logback.core.FileAppender (文件)
其中,
参考文档:
SpringBoot自定义logback日志配置_Java后端何哥的博客-CSDN博客_springboot配置logback前言:默认情况下,SpringBoot内部使用logback作为日志实现的框架,将日志输出到控制台,不会写到日志文件。如果在application.properties或application.yml配置,这样只能配置简单的场景,保存路径、日志格式等。复杂的场景(区分 info 和 error 的日志、每天产生一个日志文件等)满足不了,只能自定义配置文件logback-spring.xml。一、application.properties简单配置logback日志1.1、SpringBoot默认的日https://blog.csdn.net/CSDN2497242041/article/details/122596582