Spring Boot 之日志记录

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

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

关键词: log4j, log4j2, logback, slf4j

Spring Boot 内部日志全部使用 Commons Logging 记录,但保留底层日志实现。为 Java Util Logging,Log4J2,和 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.file 或 logging.path 属性(例如,在 application.properties 中)。

详细配置参考:配置

日志级别

所有支持的日志系统都可以 在 Spring 环境中通过 logging.level.<logger-name>=<level> 属性设置日志级别(例如,在 application.properties 中)。其中 level 是 TRACE、DEBUG、INFO、WARN 、ERROR、FATAL 或 OFF。可以使用 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 记录日志。

引申和引用

引申

引用

Spring Boot 之日志记录的更多相关文章

  1. Spring Boot 自定义日志详解

    本节内容基于 Spring Boot 2.0. 你所需具备的基础 什么是 Spring Boot? Spring Boot 核心配置文件详解 Spring Boot 开启的 2 种方式 Spring ...

  2. 【spring boot】8.spring boot的日志框架logback使用

    在继续上一篇的Debug调试之后,把spring boot的日志框架使用情况逐步蚕食. 参考:http://tengj.top/2017/04/05/springbo 开篇之前,贴上完整applica ...

  3. Spring Boot默认日志logback配置解析

    前言 今天来介绍下Spring Boot如何配置日志logback,我刚学习的时候,是带着下面几个问题来查资料的,你呢 如何引入日志? 日志输出格式以及输出方式如何配置? 代码中如何使用? 正文 Sp ...

  4. Spring Boot与日志

    目录 1.日志框架 2.市面上的日志框架 2.1 下表行间无任何对应关系 2.2 日志门面:slf4j 2.3 日志实现:logback 2.4 Spring Boot怎么做的呢? 3.slf4j的使 ...

  5. Spring AOP 完成日志记录

    Spring AOP 完成日志记录 http://hotstrong.iteye.com/blog/1330046

  6. Spring AOP进行日志记录

    在java开发中日志的管理有很多种.我一般会使用过滤器,或者是Spring的拦截器进行日志的处理.如果是用过滤器比较简单,只要对所有的.do提交进行拦截,然后获取action的提交路径就可以获取对每个 ...

  7. Spring AOP进行日志记录,管理

    在java开发中日志的管理有很多种.我一般会使用过滤器,或者是Spring的拦截器进行日志的处理.如果是用过滤器比较简单,只要对所有的.do提交进行拦截,然后获取action的提交路径就可以获取对每个 ...

  8. Spring Boot系列——日志配置

    日志,通常不会在需求阶段作为一个功能单独提出来,也不会在产品方案中看到它的细节.但是,这丝毫不影响它在任何一个系统中的重要的地位. 为了保证服务的高可用,发现问题一定要即使,解决问题一定要迅速,所以生 ...

  9. Spring Boot 2 实践记录之 封装依赖及尽可能不创建静态方法以避免在 Service 和 Controller 的单元测试中使用 Powermock

    在前面的文章中(Spring Boot 2 实践记录之 Powermock 和 SpringBootTest)提到了使用 Powermock 结合 SpringBootTest.WebMvcTest ...

随机推荐

  1. Android为TV端助力 遥控器的映射

    第一编写kl文件时先在盒子上输入getevent -v查看设备信息,设备信息里有vendor.product.version, 假如分别是xxxx,yyyy,zzzz,那么你的文件名就要命名为Vend ...

  2. apache php mysql 安装

    推荐参考这里:http://www.myhack58.com/Article/sort099/sort0100/2012/35578_3.htm

  3. leetcode-69.x的平方根

    leetcode-69.x的平方根 Points 二分查找 牛顿迭代 题意 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保 ...

  4. Flutter 布局(一)- Container详解

    本文主要介绍Flutter中非常常见的Container,列举了一些实际例子介绍如何使用. 1. 简介 A convenience widget that combines common painti ...

  5. Spark应用【根据新df更新旧df】

    // 主键字段保持不变,再转换回来 var columnMap:Map[String, String] = Map() for(key <- keysOpt){ columnMap += (ke ...

  6. C#-命名空间(十五)

    概念 命名空间的设计目的是提供一种让一组名称与其他名称分隔开的方式 在一个命名空间中声明的类的名称与另一个命名空间中声明的相同的类的名称不冲突 命名空间的定义是有一定的规范,避免引起不必要的麻烦 命名 ...

  7. 暂别SQL Server,转战MySQL和Redis

    机缘巧合下找到一个愿意提供学习MySQL和Redis机会的岗位,于是要暂别SQL Server了. 后续一段时间会陆续总结三年来SQL Server相关的工作经验,当做是暂别前的总结.

  8. SQL Server 一致性读

    我们在Oracle和MySQL数据库中已经对一致性读的概念比较熟悉了,但是在SQL Server中却鲜少提及,但SQL Server自2005版本以来其实也实现了一致性读,几乎所有关系型数据库产品的一 ...

  9. 用beamoff给VMware的Mac OS X 10.10.x加速

    前言 今天刚在VMware里装了个Yosemite,然后测试了下看电影,真j8卡,试了下在vm里打开3d加速,然并卵,直接显示不能打开3d加速,然后找了下发现有个vga的什么软件,是vmware里的显 ...

  10. adb入门学习笔记

    连接模拟器(模拟器桥接模式) 使用adb devices列出已连接到工作站的设备. 使用adb shell 启动设备或模拟器上的shell. 列出设备已安装的所有软件包 将电脑文件移动到手机模拟器上( ...