springboot2中的默认日志管理与logback配置详解(代码片段)

程序猿DD 程序猿DD     2023-03-09     289

关键词:

Spring Boot在所有内部日志中使用Commons Logging,但是对底层日志的实现是开放的。在Spring Boot生态中,为Java Util LoggingLog4J2Logback 这些常见的日志框架都提供了自动化配置组件,每种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种元素,具体如下:

  1. 时间日期:精确到毫秒
  2. 日志级别:ERROR, WARN, INFO, DEBUG or TRACE
  3. 进程ID
  4. 分隔符:--- 标识实际日志的开始
  5. 线程名:方括号括起来(可能会截断控制台输出)
  6. Logger名:通常使用源代码的类名
  7. 日志内容

日志输出

在Spring Boot应用中,日志会默认会输出到控制台中,默认的输出日志级别包含:ERRORWARNINFO,我们可以帮上面写的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.filelogging.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:归档前日志文件的最大尺寸,默认为10MB
  • logging.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=DEBUGcom.didispace包下所有class以DEBUG级别输出
  • logging.level.root=WARN:root日志以WARN级别输出

做了这样的配置之后,可以再执行下上面的程序,原本debug级别的Hello World就可以被成功输出了。

自定义日志配置

由于日志服务一般都在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支持,您的关注是我坚持的动力!

欢迎关注我的公众号:程序猿DD。前沿技术早知道,弯道超车有希望!积累超车资本,从关注DD开始!

springboot2.0+vue脚手架项目源码,中小型管理系统开发神器。

...闭、统一异常处理等技术特点。后台技术架构基于最新的SpringBoot2.0、MyBatis、Shiro、Element2.0+框架,开发的一套权限系统,极低门槛 查看详情

springboot2.0+vue脚手架项目源码,中小型管理系统开发神器。

...闭、统一异常处理等技术特点。后台技术架构基于最新的SpringBoot2.0、MyBatis、Shiro、Element2.0+框架,开发的一套权限系统,极低门槛 查看详情

springboot2.0下配置log4j2下的错误问题分析与解决

环境介绍SpringBoot2.0.2Java8任务描述由于SpringBoot2.0默认情况下是使用logback作为日志系统的,这里希望切换到log4j2.pom.xml内容定义这里在pom.xml新增了spring-boot中的日志组件<dependency><groupId>org.springframework.boot</groupId><ar 查看详情

springboot2.0之监控管理

Springboot监控中心: 针对微服务的服务状态,服务器的内存变化(内存、线程、日志管理等)检测服务配置连接地址是否有用(有些懒加载的情况下,用的时候发现卧槽不能用)模拟访问,懒加载。统计有多少个bean(Spring容器... 查看详情

springboot2-日志(代码片段)

springboot2-日志一、日志框架的选择1.供选择的部分框架二、SLF4J使用1.如何在系统中使用SLF4J2.调用代码示例:3.图示:4.如何统一日志记录三、SpringBoot日志关系1.父类2.底层实现3.底层依赖关系4.小结5.引入其他框架6.只需排... 查看详情

mysql中的日志管理日志备份与恢复(代码片段)

目录一、MySQL常用日志类型及开启1、错误日志2、通用查询日志3、二进制日志(binlog)4、慢查询日志 二、查看日志状态1、查看通用查询日志是否开启2、查看二进制日志是否开启3、查看慢查询日功能是否开启查看慢查询时间... 查看详情

项目日志的管理和应用log4js-node.js中的日志管理模块使用与封装

开发过程中,日志记录是必不可少的事情,尤其是生产系统中经常无法调试,因此日志就成了重要的调试信息来源。Node.js,已经有现成的开源日志模块,就是log4js,源码地址:点击打开链接项目引用方法:npminstalllog4js1、配置说... 查看详情

springboot2系列教程(二十)|springboot是如何实现日志的?

微信公众号:一个优秀的废人。如有问题,请后台留言,反正我也不会听。前言休息日闲着无聊看了下SpringBoot中的日志实现,把我的理解跟大家说下。门面模式说到日志框架不得不说门面模式。门面模式,其核心为外部与一个... 查看详情

十syslog日志与loganalyzer日志管理

...以及信息的重要程度将信息保存到不同的日志文件中。在默认的syslog配置下,日志文件通常都保存在/var/log目录下,在Centos6 查看详情

mysql日志管理备份与恢复(代码片段)

...备份与恢复2.1.5MySQL增量恢复一、MySQL日志管理MySQL的日志默认保存位置为/usr/local/mysql/dataMySQL的日志配置文件为/etc/my.cnf,里面有个[mysqld]项。这是我们当时安装mysql时指定的目录,如下图所示:1.1日志的分类1)错... 查看详情

springboot2中如何使用log4j2记录日志(代码片段)

上一篇我们介绍了SpringBoot2.x中默认日志框架Logback的使用。今天继续说说日志,接下来我们要讲是前段时间爆出核弹漏洞的Log4j2。虽然出了漏洞,让很多小伙伴痛苦了1-2周(加班),但不可否认的是Log4j2依然是... 查看详情

springboot2.0最新版相关技术

https://gitee.com/hejr.cn.com/SpringBoot2.0_2019/tree/master SpringBoot2.0最新版相关技术学习,该项目主要是提供给正在学习SpringBoot的小伙伴,包括整合Freemarker,JSP等web页面,以及数据访问,事务管理,日志管理,缓存(Ehcache,Redis)技术... 查看详情

springboot系列——如何集成log4j2

...绍了SpringBoot如何进行日志配置,日志系统用的是SpringBoot默认的LogBack。事实上,除了使用默认的LogBack,SpringBoot还可以使用Log4j、Log42等作为自己的日志系统。今天就那Log4j2来举例,说明SpringBoot是如何集成其他日志系统的。添加ja... 查看详情

mysql日志管理备份与恢复(代码片段)

...MySQL增量备份2、MySQL增量恢复一.MySQL日志管理MySQL的日志默认保存位置为/usr/local/mysql/dataMySQL的日志配置文件为/etc/my.cnf,里面有个[mysqld]项修改配置文件:vim/etc/my.cnf[mysqld]1、错误日志##错误日志,用来记录当MySQL启动... 查看详情

springboot2.0.2教程-目录

SpringBoot2.0.2教程-HelloWorld-01 SpringBoot2.0.2教程-HelloWorld之intellijidea创建web项目-02 SpringBoot2.0.2教程-配置文件application.properties-03 SpringBoot2.0.2教程-日志管理-04  SpringBoot2.0.2教 查看详情

mysql的日志管理和备份

一、MySQL日志管理MySQL的日志默认保存位置为/usr/local/mysql/data二、数据库备份的重要性与分类1.数据备份的重要性•备份的主要目的是灾难恢复•在生产环境中,数据的安全性至关重要•任何数据的丢失都可能产生严重的后果2... 查看详情

mysql的日志管理和备份

一、MySQL日志管理MySQL的日志默认保存位置为/usr/local/mysql/data二、数据库备份的重要性与分类1.数据备份的重要性•备份的主要目的是灾难恢复•在生产环境中,数据的安全性至关重要•任何数据的丢失都可能产生严重的后果2... 查看详情

centos7日志

...而不是交给rsyslog服务管理),用于记录本程序运行过程中的各种事件信息。由于这些程序只负责管理自己的日志文件,因此不同程序所使用的日志记录格式可能会存在较大的差异。在Linux操作系统中,还有相当一部分应用程序没... 查看详情