springboot之日志记录

静默虚空      2022-04-23     572

关键词:

Spring Boot 之日志记录

Spring Boot 支持集成 Java 世界主流的日志库。

如果对于 Java 日志库不熟悉,可以参考:细说 Java 主流日志工具库

关键词: log4j, log4j2, logback, slf4j

Spring Boot 内部日志全部使用 Commons Logging 记录,但保留底层日志实现。为 Java Util LoggingLog4J2,和 Logback 提供了默认配置。在每种情况下,记录器都预先配置为使用控制台输出,并且还提供可选的文件输出。

默认情况下,如果使用“Starters”,则使用 Logback 进行日志记录。还包括适当的 Logback 路由,以确保使用 Java Util Logging,Commons Logging,Log4J 或 SLF4J 的依赖库都能正常工作。

日志格式

Spring Boot 日志默认格式类似下面的形式:

2014-03-05 10:57:51.112  INFO 45469 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/7.0.52
2014-03-05 10:57:51.253  INFO 45469 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2014-03-05 10:57:51.253  INFO 45469 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1358 ms
2014-03-05 10:57:51.698  INFO 45469 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean        : Mapping servlet: 'dispatcherServlet' to [/]
2014-03-05 10:57:51.702  INFO 45469 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]

说明:

  • 日期和时间:精确到微秒
  • 日志级别:ERROR, WARN, INFO, DEBUG, or TRACE.
  • 进程 ID
  • --- 分隔符后面是实际的日志内容
  • 线程名
  • 日志名
  • 日志内容

控制台输出

Spring Boot 默认打印信息到控制台,并且仅打印ERROR, WARN, INFO 级别信息。

如果你想打印 debug 级别信息,可以设置 jar 启动参数,如下:

$ java -jar myapp.jar --debug

此外,也可以在 application.properties 中设置 debug = true

打印 trace 级别信息同上所示。

彩色打印

如果您的终端支持 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.filelogging.path 属性(例如,在 application.properties 中)。

详细配置参考:配置

日志级别

所有支持的日志系统都可以 在 Spring 环境中通过 logging.level.<logger-name>=<level> 属性设置日志级别(例如,在 application.properties 中)。其中 level 是 TRACEDEBUGINFOWARNERRORFATALOFF。可以使用 logging.level.root 配置根记录器。

示例:

logging.level.root=WARN
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR

日志组

能够将相关记录器组合在一起以便可以同时配置它们通常很有用。例如,您可以更改所有 Tomcat 相关记录器的日志记录级别,但您无法轻松记住顶级软件包。

Spring Boot 通过 logging.group 属性来提供这样的支持。

logging.group.tomcat=org.apache.catalina, org.apache.coyote, org.apache.tomcat
logging.level.tomcat=TRACE

以下是 Spring Boot 预设的日志组:

名称 Loggers
web org.springframework.core.codec, org.springframework.http, org.springframework.web
sql org.springframework.jdbc.core, org.hibernate.SQL

日志配置文件

可以通过在 classpath 中包含适当的库来激活各种日志记录系统,并且可以通过在 classpath 的根目录中或在以下 Spring Environment 属性指定的位置提供合适的配置文件来进一步自定义:logging.config

您可以使用 org.springframework.boot.logging.LoggingSystem 系统属性强制 Spring Boot 使用特定的日志记录系统。该值应该是 LoggingSystem 实现的完全限定类名。您还可以使用 none 值完全禁用 Spring Boot 的日志记录配置。

由于在创建 ApplicationContext 之前初始化日志记录,因此无法在 Spring @Configuration 文件中控制来自 @PropertySources 的日志记录。更改日志记录系统或完全禁用它的唯一方法是通过系统属性。

Logback 扩展

profile 指定配置

可以通过 <springProfile> 指定特定的 profile 下的配置,如下:

<springProfile name="staging">
    <!-- configuration to be enabled when the "staging" profile is active -->
</springProfile>

<springProfile name="dev | staging">
    <!-- configuration to be enabled when the "dev" or "staging" profiles are active -->
</springProfile>

<springProfile name="!production">
    <!-- configuration to be enabled when the "production" profile is not active -->
</springProfile>

环境属性

<springProperty> 标签允许指定从 Environment 中获取的属性,并在配置文件中引用。

<springProperty scope="context" name="fluentHost" source="myapp.fluentd.host"
        defaultValue="localhost"/>
<appender name="FLUENT" class="ch.qos.logback.more.appenders.DataFluentAppender">
    <remoteHost>${fluentHost}</remoteHost>
    ...
</appender>

Spring Boot 中的日志配置

logging.config= # Location of the logging configuration file. For instance, `classpath:logback.xml` for Logback.
logging.exception-conversion-word=%wEx # Conversion word used when logging exceptions.
logging.file= # Log file name (for instance, `myapp.log`). Names can be an exact location or relative to the current directory.
logging.file.max-history=0 # Maximum of archive log files to keep. Only supported with the default logback setup.
logging.file.max-size=10MB # Maximum log file size. Only supported with the default logback setup.
logging.group.*= # Log groups to quickly change multiple loggers at the same time. For instance, `logging.level.db=org.hibernate,org.springframework.jdbc`.
logging.level.*= # Log levels severity mapping. For instance, `logging.level.org.springframework=DEBUG`.
logging.path= # Location of the log file. For instance, `/var/log`.
logging.pattern.console= # Appender pattern for output to the console. Supported only with the default Logback setup.
logging.pattern.dateformat=yyyy-MM-dd HH:mm:ss.SSS # Appender pattern for log date format. Supported only with the default Logback setup.
logging.pattern.file= # Appender pattern for output to a file. Supported only with the default Logback setup.
logging.pattern.level=%5p # Appender pattern for log level. Supported only with the default Logback setup.
logging.register-shutdown-hook=false # Register a shutdown hook for the logging system when it is initialized.

注:

  • 日志配置属性在应用程序生命周期的早期初始化。因此,通过 @PropertySource 注释加载的属性文件中找不到日志记录属性。
  • 日志配置属性独立于实际的日志记录基础结构。因此,spring Boot 不管理特定的配置密钥(例如 Logback 的 logback.configurationFile)。

源码

完整示例:源码

分别展示如何在 Spring Boot 中使用 log4j, log4j2, logback 记录日志。

引申和引用

引申

引用

springboot实战之接口日志篇

在本篇文章中不会详细介绍日志如何配置、如果切换另外一种日志工具之类的内容,只用于记录作者本人在工作过程中对日志的几种处理方式。1.Debug日志管理在开发的过程中,总会遇到各种莫名其妙的问题,而这些问题的定位... 查看详情

springboot进阶之日志集成(logback)

...一路看过来的,很高兴你能够耐心看完。之前带大家学了Springboot基础部分,对基本的使用有了初步的认识,接下来的几期内容将会带大家进阶使用,会先讲解基础中间件的使用和一些场景的应用,或许这些技术你听说过,没看过... 查看详情

springboot初始教程之日志处理

SpringBoot初始教程之日志处理(二)1.介绍SpringBoot默认是采用logback进行日志处理、Logback是由log4j创始人设计的又一个开源日志组件。Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块:logback-core,logback-classic和... 查看详情

springboot使用之三:springboot使用logback日志

springboot默认使用的日志就是logback,所以使用logback不需要添加日志相关依赖了,执行添加logback.xml配置文件,springboot这个聪明的框架便能识处理你的配置。做法:将logback.xml放在resources下(classpath)下即可。配置参考如下:<?xm... 查看详情

springboot之简单日志配置

...inkerDesktopmyfileootLog1使用path方式文件会默认10M分割比如:springboot1.logspringboot2.log…...2注意下上 查看详情

springboot-记录日志

比自己写文本日志的好处默认定义好了一些日志级别,会记录当前使用的级别以上的日志,通常线上环境设置的级别较高记得较少有一些自动split之类的功能Commons-logging日志级别:TRACE<DEBUG<INFO<WARN<ERROR<FATAL使用applicatio... 查看详情

springboot之handlerinterceptoradapter

参考技术A在SpringBoot中我们可以使用HandlerInterceptorAdapter这个适配器来实现自己的拦截器。这样就可以拦截所有的请求并做相应的处理。应用场景在HandlerInterceptorAdapter中主要提供了以下的方法:preHandle:在方法被调用前执行。在... 查看详情

重学springboot系列之日志框架与全局日志管理(代码片段)

重学SpringBoot系列之日志框架与全局日志管理日志框架的体系结构五花八门的日志工具包日志框架日志门面日志门面存在的意义日志框架选型日志级别常见术语概念解析logback日志框架配置application配置文件实现日志配置日志格式... 查看详情

springboot初始教程之日志处理(代码片段)

SpringBoot初始教程之日志处理(二)1.介绍SpringBoot默认是采用logback进行日志处理、Logback是由log4j创始人设计的又一个开源日志组件。Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块:logback-core,logback-class... 查看详情

springboot初始教程之日志处理(代码片段)

SpringBoot初始教程之日志处理(二)1.介绍SpringBoot默认是采用logback进行日志处理、Logback是由log4j创始人设计的又一个开源日志组件。Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块:logback-core,logback-class... 查看详情

springboot中使用springaop实现日志记录功能

参考技术A一、创建日志注解1、日志类型枚举类2、自定义日志注解二、利用AOP实现日志切面统一处理1、日志实现类创建工厂2、切面类三、创建日志实现类1、添加日志接口2、添加日志接口实现类四、controller 查看详情

springboot-日志记录

参考技术A[TOC]SpringBoot内部使用的日志框架为CommonsLogging,但是CommonsLogging的内部具体实现可以由用户自行指定。默认已提供了对JavaUtilsLogging,Log4J2和Logback日志库的相关配置。无论选择以上哪一个日记库,SpringBoot都预置了将日志... 查看详情

Spring Boot 2.1 MVC 日志记录

】SpringBoot2.1MVC日志记录【英文标题】:SpringBoot2.1MVCLogging【发布时间】:2019-06-1820:24:33【问题描述】:从2.0.x升级SpringBoot2.1.x,不记录MVC映射日志..SpringBoot2.0.x记录了INFO级别的MVCMapping,非常方便且易于识别的日志。**SpringBoot2.0.x*... 查看详情

剑指架构师系列-springboot的logback日志记录

  SpringBoot集成了Logback日志系统。Logback的核心对象主要有3个:Logger、Appender、Layout 1、Logback Logger:日志的记录器 主要用于存放日志对象,也可以定义日志类型、级别。级别:ERROR、WARE、INFO、DEBUG和TRACE。没有FATA... 查看详情

springboot配置使用springaop日志记录

1、引入pom<!--springBoot的aop--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><!--日志打印使用到 查看详情

springboot配置使用springaop日志记录

1、引入pom<!--springBoot的aop--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency><!--日志打印使用到 查看详情

在springboot中用springaop实现日志记录功能

背景:我需要在一个SpringBoot的项目中的每个controller加入一个日志记录,记录关于请求的一些信息。代码类似于:  logger.info(request.getRequestUrl());之类的。代码不难,但由于Controller的数量不少,干起来也是体力活。所以想到了用S... 查看详情

springboot接口项目利用aop记录日志

...志收集二、    环境  1.此随笔内容基于springboot项目  2.数据库为mysql5.7.9版本  3.jdk版本为1.8三、    说明  此版采用数据 查看详情