“Springboot-日志配置”的版本间的差异

来自小能手俱乐部
跳到导航 跳到搜索
第115行: 第115行:
*特定于配置文件的配置
*特定于配置文件的配置
springProfile 标记,允许根据活动的Spring配置文件选择包括或者排除部分配置,使用<code>name</code> 属性指定配置文件,可以包含名称或表达式
springProfile 标记,允许根据活动的Spring配置文件选择包括或者排除部分配置,使用<code>name</code> 属性指定配置文件,可以包含名称或表达式
<div>
<blockquote>
<blockquote>
<springProfile name="staging"><br/>
<springProfile name="staging"><br/>
     <!-- configuration to be enabled when the "staging" profile is active --><br/>
     <!-- configuration to be enabled when the "staging" profile is active --><br/>
</springProfile><br/>
</springProfile><br/>
<br/>
<springProfile name="dev | staging"><br/>
<springProfile name="dev | staging"><br/>
     <!-- configuration to be enabled when the "dev" or "staging" profiles are active --><br/>
     <!-- configuration to be enabled when the "dev" or "staging" profiles are active --><br/>
</springProfile><br/>
</springProfile><br/>
<br/>
<springProfile name="!production"><br/>
<springProfile name="!production"><br/>
     <!-- configuration to be enabled when the "production" profile is not active --><br/>
     <!-- configuration to be enabled when the "production" profile is not active --><br/>
</springProfile><br/>
</springProfile><br/>
<blockquote/>
</blockquote>
 
</div>
*环境属性
*环境属性


第134行: 第133行:
<blockquote>
<blockquote>
<springProperty name="level" source="logger.a.level" defaultValue="INFO"/><br/>
<springProperty name="level" source="logger.a.level" defaultValue="INFO"/><br/>
    <br/>
     <root level="${level}"><br/>
     <root level="${level}"><br/>
         <appender-ref ref="CONSOLE" /><br/>
         <appender-ref ref="CONSOLE" /><br/>
第140行: 第138行:
     </root><br/>
     </root><br/>
</blockquote>
</blockquote>
===Log4J2===
===Log4J2===

2021年8月27日 (五) 02:58的版本

Spring Boot 日志记录

Spring Boot为所有的内部日志记录使用Commons Logging***?***,但开放底层日志实现,提供了Java Util Logging、Log4J2和Logback的默认配置,每种情况下,日志记录其都被预先配置为使用控制台输出,可选的文件输出也是可用的。如果使用了默认的“Stater”,spring-boot-stater->spring-boot-stater-logging,Logback用于记录日志。

日志格式

Spring Boot 的默认日志(默认情况使用Logback)输出以下项目:

  • 日期和时间:毫秒精度,易于排序。
  • 日志级别:ERROR、WARN、INFO、DEBUG、TRACE(Logback中没有FATAL级别,它映射到ERROR)
  • 进程 ID。
  • 用于区分实际日志消息开始的分隔符。---
  • 线程名称:用方括号括起来(对于控制台输出,可能会截断)。
  • 记录器名称:这通常是源类名称(通常缩写)。
  • 日志消息。

可以使用 logging.pattern.console来定义

控制台输出

日志默认输出到控制台,级别为INFO

文件输出

启用文件输出,需要设置 logging.file.name or logging.file.path

logging.file.name: 日志写入特定的文件,可以是绝对路径也可以是相对路径

logging.file.path:日志写入特定目录的spring.log文件,可以是绝对路径也可以是相对路径

这两个参数不会同时生效,文件的级别要更高

logging.file.max-size:文件大小(默认单位为字节,可以使用KB、MB、GB),默认10M,超过之后就会分割并压缩存档

logging.file.max-history:最大保留天数,默认为7天,超过之后就会删除

logging.file.total-size-cap:日志存档总大小,超过后历史文件也会别删除

logging.file.clean-history-on-start: 应用程序启动时强制进行日志存档清理

日志级别

所有受支持的日志系统都可以在Spring环境中通过ogging.level.<logger-name>=<level>设置日志级别,logging.level.root可以设置ROOT级别

logging.level.root=warn

logging.level.org.springframework.web=debug

logging.level.org.hibernate=error

也可以使用环境变量来设置,例如 LOGGING_LEVEL_ORG_SPRINGFRAMEWORK_WEB=DEBUG

日志组

我们经常会用到将相关的记录器分组到一起,以便可以同时配置它们。所以Spring Boot允许在 Spring 中定义日志记录组

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, org.springframework.boot.actuate.endpoint.web, org.springframework.boot.web.servlet.ServletContextInitializerBeans
sql org.springframework.jdbc.core, org.hibernate.SQL, org.jooq.tools.LoggerListener

自定义日志配置

可以引入对应的jar包来激活适当的日志系统,也可以添加配置文件来对日志系统进行配置

根据日志系统,将加载对应的配置文件

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变体的配置文件,如果使用标准的配置文件,Spring可能无法完全控制日志的初始化。也不建议使用JUL(已知的类加载问题)

默认的Logback配置文件在 org/springframework/boot/logging/logback/base.xml

我们也可以直接在配置文件引入默认的配置然后再覆盖默认配置


<?xml version="1.0" encoding="UTF-8" ?>


<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml" />

<root level="DEBUG">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>


<springProfile name="test,dev">
<logger name="org.springframework.web" level="INFO">
<appender-ref ref="FILE" />
</logger>
<logger name="com.example" level="INFO" />
</springProfile>


<springProfile name="prod">
<logger name="org.springframework.web" level="ERROR">
<appender-ref ref="FILE" />
</logger>
<logger name="com.example" level="ERROR" />
</springProfile>

</configuration>

Spring Boot对logback的扩展

  • 特定于配置文件的配置

springProfile 标记,允许根据活动的Spring配置文件选择包括或者排除部分配置,使用name 属性指定配置文件,可以包含名称或表达式

<springProfile name="staging">

</springProfile>
<springProfile name="dev | staging">

</springProfile>
<springProfile name="!production">

</springProfile>

  • 环境属性

springProperty 标记,允许您公开 Spring 中的属性,供logback中使用。source指定要用的属性,name将此定义为占位符/变量,可以用defaultValue提供默认值

<springProperty name="level" source="logger.a.level" defaultValue="INFO"/>
<root level="${level}">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>

Log4J2