惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Forbes - Security
Forbes - Security
A
Arctic Wolf
M
MIT News - Artificial intelligence
T
Threat Research - Cisco Blogs
T
The Exploit Database - CXSecurity.com
C
CERT Recently Published Vulnerability Notes
NISL@THU
NISL@THU
L
Lohrmann on Cybersecurity
Martin Fowler
Martin Fowler
A
About on SuperTechFans
P
Palo Alto Networks Blog
Project Zero
Project Zero
The GitHub Blog
The GitHub Blog
WordPress大学
WordPress大学
Blog — PlanetScale
Blog — PlanetScale
博客园_首页
大猫的无限游戏
大猫的无限游戏
Cisco Talos Blog
Cisco Talos Blog
P
Proofpoint News Feed
D
DataBreaches.Net
Cyberwarzone
Cyberwarzone
T
Tor Project blog
IT之家
IT之家
P
Proofpoint News Feed
Help Net Security
Help Net Security
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
CXSECURITY Database RSS Feed - CXSecurity.com
Microsoft Azure Blog
Microsoft Azure Blog
V2EX - 技术
V2EX - 技术
K
Kaspersky official blog
Hugging Face - Blog
Hugging Face - Blog
MongoDB | Blog
MongoDB | Blog
B
Blog
N
News and Events Feed by Topic
The Cloudflare Blog
S
Schneier on Security
P
Privacy & Cybersecurity Law Blog
T
The Blog of Author Tim Ferriss
Recorded Future
Recorded Future
Last Week in AI
Last Week in AI
The Last Watchdog
The Last Watchdog
Hacker News - Newest:
Hacker News - Newest: "LLM"
L
LangChain Blog
I
InfoQ
F
Full Disclosure
The Register - Security
The Register - Security
阮一峰的网络日志
阮一峰的网络日志
H
Hacker News: Front Page
V
V2EX

博客园 - wastonl

Spring ResolvableType说明 Jvm内存以及垃圾回收相关知识 RocketMQ如何保证消息可靠性 RocketMQ整体架构 mybatis-plus易忘点笔记 SpringMVC使用Resource实现二进制传输(下载) Spring事件异步执行设计与实现 Spring Bean销毁机制 Spring Lifecycle组件 Zipkin Brave使用 spring cloud sleuth基本使用 Spring懒加载与@Lazy注解 tomcat自动刷新响应输出流缓冲区 https碎碎念 ES脚本使用 SpringMVC静态资源处理 Maven插件运行方式 如何使用Maven将项目中的依赖打进jar包 时区以及时区对于Java时间类格式化的影响 SpringMVC处理请求头、响应头、编码行为 tomcat连接处理机制和线程模型 树组件实现 JWT示例与原理 方法句柄API使用
Spring Boot日志系统简要介绍
wastonl · 2026-01-12 · via 博客园 - wastonl

Spring官方文档参考

https://docs.spring.io/spring-boot/reference/features/logging.html

Logback变量默认值

如果变量未定义,在<pattern>标签中使用时情况说明

${}取值,从<property>标签定义的变量获取 -> jvm系统参数->环境变量 (优先级从左往右)

%X{}取值,从MDC中获取变量值

<!-- 日志中会输出APP_NAME_IS_UNDEFINED -->
<pattern>${APP_NAME}</pattern>

<!-- 日志中会输出空字符串 -->
<pattern>%X{APP_NAME}</pattern>

默认值写法

使用:-语法,注意需要一个横杠(-)

<!-- 这样子就会输出unknow了 -->
<pattern>${APP_NAME:-unknow}</pattern>
<!-- 注意这种写法也不会输出空字符串, 而是输出APP_NAME_IS_UNDEFINED -->
<pattern>${APP_NAME:-}</pattern>
<!-- 这样子就会输出unknow了 -->
<pattern>%X{APP_NAME:-unknow}</pattern>

日志实现切换

SpringBoot默认的日志实现为logback,如果想要切换成log4j2,只需排除logback依赖,添加log4j2的即可

<!-- 添加log4j2依赖 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

<!-- spring-boot-starter是基础依赖,自带了logback日志依赖, 排除即可 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter</artifactId>
  <exclusions>
    <exclusion>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-logging</artifactId>
    </exclusion>
  </exclusions>
</dependency>

默认的日志配置

在没有指定配置文件时,Spring Boot打印日志行为可参考spring-boot.jar包中base.xml。

路径为org.springframework.boot.logging.logback包下。

log4j2同理。

日志配置文件

以logback为例

类路径下存在

  • logback-spring.xml
  • logback.xml

同时存在时Spring Boot优先使用logback-spring.xml。

那么logback-spring.xml与logback.xml有什么区别呢?

logback.xml是logback日志框架默认的配置文件,由logback自己加载,Spring Boot不会参与解析和增强它,而logback-spring.xml由Spring Boot来加载,会被Spring Boot增强,并且解析时机在Spring的环境初始化之后。因此在logback-spring.xml中可以读取Spring环境中的变量。

<configuration>
  <!-- 从Spring环境中读取配置 -->
  <springProperty scope="context" name="APP_NAME" source="spring.application.name" defaultValue="myapp"/>

  <!-- 根据spring激活的profile来生效配置 -->
  <springProfile name="dev">
    <logger name="com.waston.app" level="debug">
  </springProfile>

  <springProfile name="dev">
    <Logger name="com.waston.app" level="info">
  </springProfile>
</configuration>

注: SpringBoot 2.x版本扩展语法对log4j2不支持,需要引入log4j2扩展语法的依赖才行。Spring Boot 3.x版本官方支持,无需引入额外依赖。

<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-spring-boot</artifactId>
  <scope>runtime</scope>
</dependency>
<Properties>
  <!-- 从Spring环境中读取配置 -->
  <Property name="applicationName">${spring:spring.application.name:-default}</Property>
</Properties>

<SpringProfile name="dev">
  <Logger name="com.waston.app" level="debug">
</SpringProfile>

JVM系统属性

Spring Boot会把环境中一些日志属性添加到JVM系统属性中,具体可参考LoggingSystemProperties

logging.file.name LOG_FILE
logging.file.path LOG_PATH
PID(从操作系统获取)

注:如果环境中的值存在${}占位符,也会一并替换掉的。