SpringBoot 整合logback日志框架各种日志记录方式配置

2,226 阅读7分钟

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

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

Java有很多日志框架可供使用。如果以上列表看起来令人困惑,请不要担心。通常,您不需要更改日志记录依赖项,并且Spring Boot默认值可以正常工作。

日志格式

Spring Boot的默认日志输出类似于以下示例:

输出以下项目:

  1. 日期和时间:毫秒精度,易于排序。
  2. 日志级别:ERROR,WARN,INFO,DEBUG或TRACE。
  3. 进程ID。
  4. 一个---分隔符,用于区分实际日志消息的开头。
  5. 线程名称:括在方括号中(可能会截断控制台输出)。
  6. 记录器名称:这通常是源类名称(通常缩写)。
  7. 日志消息。

Logback没有FATAL级别。它映射到ERROR。

控制台输出

默认日志配置会在写入时将消息回显到控制台。默认情况下,会记录ERROR - 级别,WARN - 级别和INFO级别的消息。您还可以通过使用--debug标志启动应用程序来启用“调试”模式。

$ java -jar myapp.jar --debug

您还可以在application.properties中指定debug=true

启用调试模式后,将选择一些核心记录器(嵌入式容器,Hibernate和Spring Boot)以输出更多信息。启用调试模式并没有将应用程序配置为记录与DEBUG级别的所有消息。

或者,您可以通过使用--trace标志(或application.properties中的trace=true)启动应用程序来启用“跟踪”模式。这样做可以为选择的核心记录器(嵌入式容器,Hibernate模式生成和整个Spring组合)启用跟踪日志记录。

简而言之默认打印录ERROR - 级别,WARN - 级别和INFO级别的消息,如果想打印更多信息在application.properties中的debug=true调试模式,调试信息将会打印出来如果想追踪所以信息application.properties中的trace=true所以信息都会打印

彩色编码输出

如果您的终端支持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中)

logging.file.name logging.file.path 描述 实例
没有 没有 仅控制台记录。
具体文件 没有 写入指定的日志文件。名称可以是精确位置或相对于当前目录文件夹不存在会自动创建。 my.log或者 /user/log/my.log
没有 具体目录 将spring.log写入指定的目录。名称可以是精确位置或相对于当前目录文件夹不存在会自动创建。 /var/log

注意在最新SpringBoot2.2.2 推荐使用logging.file.name和logging.file.path而logging.file和logging.path已经被淘汰,但是具体使用是一样的,主要区别是logging.file.path,只能在指定目录生成默认的文件spring.log而logging.file.name必须指定文件名否则就不会生效

日志文件在达到10 MB时会轮换,与控制台输出一样,默认情况下会记录ERROR - 级别,WARN - 级别和INFO级别的消息。可以使用logging.file.max-size属性更改大小限制。除非已设置logging.file.max-history属性,否则以前轮换的文件将无限期归档。

日志记录系统在应用程序生命周期的早期初始化。因此,在通过@PropertySource注释加载的属性文件中找不到日志记录属性。

日志记录属性独立于实际的日志记录基础结构。因此,Spring Boot不管理特定的配置密钥(例如用于Logback的logback.configurationFile)。

日志级别

所有受支持的日志记录系统都可以使用logging.level.=在Spring Environment中设置记录器级别(例如,在application.properties中),其中level是TRACE,DEBUG,INFO之一,警告,错误,致命或关闭。可以使用logging.level.root配置root记录器。

以下示例显示application.properties中的潜在日志记录设置:

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

可设的值有OFF、FATAL、ERROR、WARN、INFO DEBUG、或TRACE、ALL日志级别由高到底 您可以控制应用程序中相应级别的日志信息的开关,比如在这里设定了INFO级别,则应用程序中所有DEBUG级别的日志信息将不会被打印出来。

日志组

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

为此,Spring Boot允许您在Spring Environment中定义日志记录组。例如,以下是如何通过将“tomcat”组添加到application.properties来定义它:

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

定义后,您可以使用一行更改组中所有记录器的级别:

logging.level.tomcat=TRACE

Spring Boot包括以下可以开箱即用的预定义日志记录组:

名称 记录仪
web org.springframework.core.codec, org.springframework.http, org.springframework.web
sql org.springframework.jdbc.core, org.hibernate.SQL

自定义日志配置

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

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

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

根据您的日志记录系统,将加载以下文件:

记录系统 定制
Logback logback-spring.xml, logback-spring.groovy, logback.xml, or logback.groovy
Log4j2 log4j2-spring.xml or log4j2.xml
JDK (Java Util Logging) logging.properties

如果可能,我们建议您使用-spring变体进行日志记录配置(例如,logback-spring.xml而不是logback.xml)。如果使用标准配置位置,Spring无法完全控制日志初始化。

Java Util Logging存在已知的类加载问题,这些问题在从“可执行jar”运行时会导致问题。如果可能的话,我们建议您在从“可执行jar”运行时避免使用它。

SLF4j使用

如何在系统中使用SLF4j

以后开发的时候,日志记录方法的调用,不应该来直接调用日志的实现类,而是调用日志抽象层里面的方法

这和我们单独使用日志jar包有所不同

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld {
public static void main(String[] args) {
  Logger logger = LoggerFactory.getLogger(HelloWorld.class);
  logger.info("Hello World");	
  }
}	

日志配置

SpringBoot默认帮我们配置好了日志;

日志输出格式:
%d表示日期时间,
%thread表示线程名,
%‐5level:级别从左显示5个字符宽度
%logger{50} 表示logger名字最长50个字符,否则按照句点分割。
%msg:日志消息,
%n是换行符
‐‐>
logging.pattern.console= %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level ----- %logger{50} ---> %msg%n

SpringBoot修改日志的默认配置属性文件

#指定那些包日志进行相应level打印root表示所有的包
logging.level.root=debug
logging.level.com.fashvn.ctmsdata=DEBUG
#配置日志打印控制台格式
logging.pattern.console= %d{HH:mm:ss} - %logger{50} - %msg%n
#配置日志文件内容输出格式
logging.pattern.file= %clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){yellow}%n
#指定输出到日志文件可以自己指定
logging.file.name=logs/log.log
# 指定输出到日志文件spring.log
logging.file.path=logs/out
# 指定日志文件大小默认是10M这里单位KB超过10M就会按照日期进行无限归档
logging.file.max-size=1024
#归档的日志文件数量默认是7
logging.file.max-history
# 清除历史档案默认false
logging.file.clean-history-on-start=true
#日志输出格式
logging.pattern.level=%5p

参考文献

www.springcloud.cc/spring-boot…

www.javazhiyin.com/22888.html

www.jianshu.com/p/805a75405…

blog.csdn.net/shiyibodec/…

blog.csdn.net/menghuannvx…

www.jianshu.com/p/f67c721ee…

www.jianshu.com/p/f67c721ee…