本文来自:https://blog.didispace.com/spring-boot-learning-2-8-1/

在Spring Boot生态中,为Java Util Logging 、Log4J2 和Logback 这些常见的日志框架都提供了自动化配置组件,每种Logger都可以通过配置在控制台或者文件中输出日志内容。默认情况下SpringBoot会使用Logback来实现日志管理。

一、如何记日志

首先,在代码层面,我们不纠结到底用默认的Logback还是Log4j,而是直接用:Slf4j。
为什么不用管具体用Logback还是Log4j,就可以去写代码呢?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种元素,具体如下:
1、时间日期:精确到毫秒
2、日志级别:ERROR, WARN, INFO, DEBUG or TRACE
3、进程ID
4、分隔符:— 标识实际日志的开始
5、线程名:方括号括起来(可能会截断控制台输出)
6、Logger名:通常使用源代码的类名
7、日志内容

三、日志输出

在Spring Boot应用中,日志会默认会输出到控制台中默认的输出日志级别包含:ERROR、WARN和INFO,我们可以帮上面写的Hello World例子跑起来,就可以看到 ERROR WARN INFO级别的日志输出了,DEBUG 和 TRACE级别的日志没有输出

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模式

在配置文件application.properties中配置logger.level.xxx(你自己的包名) = bebug
在这里插入图片描述

四、日志配置

下面介绍一些常用的日志配置,以帮助我们更好的管理好日志内容。

1、日志输出到文件

Spring Boot默认配置只会输出到控制台,并不会记录到文件中,但是我们通常生产环境使用时都需要以文件方式记录。

若要增加文件输出,需要在配置文件application.properties配置几个参数,比如这样:

logging.file.name=run.log #设置文件名
logging.file.path=./  #设置文件路径
2、日志文件滚动

一直把日志输出在一个文件里显然是不合适的,任何一个日志框架都会为此准备日志文件的滚动配置。
由于本篇将默认配置,所以就是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:归档前日志文件的最大尺寸,默认为10MB
logging.logback.rollingpolicy.total-size-cap:日志档案在被删除前的最大容量,默认为0B
3、日志级别控制

如果要对各个Logger做一些简单的输出级别控制,那么只需要在application.properties中进行配置就能完成。
配置格式:logging.level.*= level
logging.level:日志级别控制前缀,*为包名或Logger名
level:选项TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF

4、SpringBoot中日志配置文件的命名和位置

根据不同的日志系统,你可以按如下规则组织配置文件名,配置就能被日志服务正确加载:

  • Logback:logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
  • Log4j2:log4j2-spring.xml, log4j2.xml
  • JUL(Java Util Logging):logging.properties
    Spring Boot官方推荐优先使用带有-spring的文件名作为你的日志配置(如使用logback-spring.xml,而不是logback.xml)
5、自定义输出格式

在Spring Boot中可以通过在application.properties配置如下参数控制输出格式:

  • logging.pattern.console:定义输出到控制台的样式(不支持JDK Logger)
    %d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n

  • logging.pattern.file:定义输出到文件的样式(不支持JDK Logger)

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐