

Spring Boot 2.x基础教程:默认日志管理与Logback配置详解
source link: https://blog.didispace.com/spring-boot-learning-2-8-1/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Spring Boot在所有内部日志中使用Commons Logging,但是对底层日志的实现是开放的。在Spring Boot生态中,为Java Util Logging 、Log4J2 和Logback 这些常见的日志框架都提供了自动化配置组件,每种Logger都可以通过配置在控制台或者文件中输出日志内容。默认情况下,当我们使用各种Starter的时候,会使用Logback来实现日志管理。
如何记日志
在介绍写日志的方式有很多,这里就不对各种方式做罗列了,只讲DD用得最多的方式!
首先,在代码层面,我们不纠结到底用默认的Logback还是Log4j,而是直接用:Slf4j。
为什么不用管具体用Logback还是Log4j就可以去写代码呢?这个就是使用Slf4j好处,为什么是Slf4j?英文全称:Simple Logging Facade for Java,即:简单日志门面,它并不是一个具体的日志解决方案,实际工作的还是Logback或Log4j这样的日志框架。Slf4j就是23种设计模式中门面模式的典型应用案例。通过Slf4j这样一个门面的抽象存在,让我们在写代码的之后,只依赖这个抽象的日志操作,而具体的实现会在Slf4j门面调用的时候委托给具体的实现。
比如下面的就是一个简单的日志记录例子:
@Slf4j
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
log.error("Hello World");
log.warn("Hello World");
log.info("Hello World");
log.debug("Hello World");
log.trace("Hello World");
}
}
注意:这里我们通过在pom.xml
中引入了Lombok,然后使用@Slf4j
声明引入Slf4j的log
日志记录对象,之后就可以轻松的用它来日志了。而这个日志具体是如何写到控制台或者文件的,则有Spring Boot项目中引入了什么具体的日志框架决定,默认情况下就是Logback。
启动任意一个Spring Boot项目,我们都可以在控制台看到很多日志信息,比如下面这样的一条日志:
日志的输出内容中一共有7种元素,具体如下:
- 时间日期:精确到毫秒
- 日志级别:ERROR, WARN, INFO, DEBUG or TRACE
- 分隔符:
---
标识实际日志的开始 - 线程名:方括号括起来(可能会截断控制台输出)
- Logger名:通常使用源代码的类名
在Spring Boot应用中,日志会默认会输出到控制台中,默认的输出日志级别包含:ERROR
、WARN
和INFO
,我们可以帮上面写的Hello World例子跑起来,就可以验证这样的默认设定:
2021-12-28 17:37:25.578 INFO 65136 --- [ main] com.didispace.chapter81.Application : Started Application in 2.695 seconds (JVM running for 3.957)
2021-12-28 17:37:25.579 ERROR 65136 --- [ main] com.didispace.chapter81.Application : Hello World
2021-12-28 17:37:25.579 WARN 65136 --- [ main] com.didispace.chapter81.Application : Hello World
2021-12-28 17:37:25.579 INFO 65136 --- [ main] com.didispace.chapter81.Application : Hello World
开启DEBUG日志
我们可以通过两种方式切换至DEBUG
级别:
第一种:在运行命令后加入--debug
标志,如:$ java -jar myapp.jar --debug
第二种:在配置文件application.properties
中配置debug=true
这里开启的DEBUG日志,仅影响核心Logger,包含嵌入式容器、hibernate、spring等这些框架层面的会输出更多内容,但是你自己应用的日志并不会输出为DEBUG级别,从下面的截图中我们就可以看到,我们自己编写的debug级别的Hello
World并没有输出。
下面介绍一些常用的日志配置,以帮助我们更好的管理好日志内容。
如果你的终端支持ANSI,设置彩色输出会让日志更具可读性。通过在application.properties
中设置spring.output.ansi.enabled
参数来支持,该参数有三个选项:
- NEVER:禁用ANSI-colored输出
- DETECT:会检查终端是否支持ANSI,是的话就采用彩色输出(默认项)
- ALWAYS:总是使用ANSI-colored格式输出,若终端不支持的时候,会有很多干扰信息,不推荐使用
注意:Spring Boot 1.x的时候,默认值为NEVER,2.x之后默认为DETECT,所以看我们上面的截图,默认就已经带有颜色了。所以如果是Spring Boot 2.x版本用户的话,这个基本就不用去修改了。
Spring Boot默认配置只会输出到控制台,并不会记录到文件中,但是我们通常生产环境使用时都需要以文件方式记录。
若要增加文件输出,需要在配置文件application.properties
配置几个参数,比如这样:
logging.file.name=run.log
logging.file.path=./
logging.file.name
:设置文件名logging.file.path
:设置文件路径
注意:这里跟1.x版本有区别,1.x的时候分别对应的参数为
logging.file
和logging.path
。
一直把日志输出在一个文件里显然是不合适的,任何一个日志框架都会为此准备日志文件的滚动配置。由于本篇将默认配置,所以就是Logback的配置,具体有这几个:
logging.logback.rollingpolicy.file-name-pattern
:用于创建日志档案的文件名模式。logging.logback.rollingpolicy.clean-history-on-start
:应用程序启动时是否对进行日志归档清理,默认为false,不清理logging.logback.rollingpolicy.max-history
:要保留的最大归档日志文件数量,默认为7个logging.logback.rollingpolicy.max-file-size
:归档前日志文件的最大尺寸,默认为10MBlogging.logback.rollingpolicy.total-size-cap
:日志档案在被删除前的最大容量,默认为0B
如果要对各个Logger做一些简单的输出级别控制,那么只需要在application.properties
中进行配置就能完成。
配置格式:logging.level.*=LEVEL
logging.level
:日志级别控制前缀,*
为包名或Logger名LEVEL
:选项TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF
logging.level.com.didispace=DEBUG
:com.didispace
包下所有class以DEBUG级别输出logging.level.root=WARN
:root日志以WARN级别输出
做了这样的配置之后,可以再执行下上面的程序,原本debug级别的Hello World就可以被成功输出了。
logging.level.com.didispace=DEBUG
自定义日志配置
由于日志服务一般都在ApplicationContext创建前就初始化了,它并不是必须通过Spring的配置文件控制。因此通过系统属性和传统的Spring Boot外部配置文件依然可以很好的支持日志控制和管理。
根据不同的日志系统,你可以按如下规则组织配置文件名,就能被正确加载:
- Logback:
logback-spring.xml
,logback-spring.groovy
,logback.xml
,logback.groovy
- Log4j2:
log4j2-spring.xml
,log4j2.xml
- JDK (Java Util Logging):
logging.properties
Spring Boot官方推荐优先使用带有-spring
的文件名作为你的日志配置(如使用logback-spring.xml
,而不是logback.xml
)
自定义输出格式
在Spring Boot中可以通过在application.properties
配置如下参数控制输出格式:
- logging.pattern.console:定义输出到控制台的样式(不支持JDK Logger)
- logging.pattern.file:定义输出到文件的样式(不支持JDK Logger)
好了,今天的学习就到这里!如果您学习过程中如遇困难?可以加入我们超高质量的Spring技术交流群,参与交流与讨论,更好的学习与进步!汇总页面《Spring Boot基础教程》可以点击直达!,欢迎收藏与转发支持!
本文的完整工程可以查看下面仓库中2.x
目录下的chapter8-1
工程:
如果您觉得本文不错,欢迎Star
支持,您的关注是我坚持的动力!
Recommend
-
35
文 | 百川 on 资产管理 一、引言 Logback 是一个优秀的开源日志框架,我们很多项目都使用它来记录日志。实际使用时,通常仅需要一行语句即可记录相应的日志信息,如
-
48
一、背景 当生产环境web服务器做了负载集群后,查询每个tomcat下的日志无疑是一件麻烦的事,elk为我们提供了快速查看日志的方法。这里是自己搭建的一套,后续会介绍使用阿里云的日志服务。 二、环境 CentO...
-
6
动态调整线上日志级别是一个非常常见的场景,借助apollo这种配置中心组件非常容易实现。作为apollo的官方技术支持,博主经常在技术群看到有使用者询问apollo是否可以托管logback的配置文件,毕竟有了配置中心后,消灭所有的本地配置全部交给apollo管理是我们的最终...
-
2
Spring Boot 2.x基础教程:使用Log4j2记录日志 【福利】设计模式学...
-
7
tinylog简介tinylog,与其他各种tiny开头的东西一样,是一个轻量级的开源日志解决方案。它本身只包含两个JAR文件(一个用于API,另一个用于实现),没有任何外部依赖关系。两个JAR文件的总大小只有178KB。...
-
5
Logback中文手册 下载 在阅读本文前,请先保证你熟悉logback的配置方式,能够实现logback的基本日志配置,并明白你的日志是如何通...
-
4
项目中日志系统是必不可少的,目前比较流行的日志框架有log4j、logback等,可能大家还不知道,这两个框架的作者是同一个人,Logback旨在作为流行的log4j项目的后续版本,从而恢复log4j离开的位置。另外 slf4j(Simple Logging Facade for Java) 则是一个日志门...
-
6
【Logback+Spring-Aop】实现全面生态化的全链路日志追踪系统服务插件「Logback-MDC篇」 精选 原创 洛神灬...
-
5
【Logback+Spring-Aop】实现全面生态化的全链路日志追踪系统服务插件「Logback-MDC篇」 - 洛神灬殇 - 博客园 日志追踪对于功能问题的排查和数据流转的...
-
3
logback的maven配置 xml<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version&...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK