spring的logback引用application配置文件的变量

一、背景

spring项目将日志上传到阿里云,需要accessKeyId、accessKeySecret这二个值,希望从application.xml文件中读取这二个值,但试了很多次都没成功。后来了解到,spring配置文件的加载顺序如下:logback.xml -> application.properties/yml -> logback-spring.xml。刚好logback的配置文件名是logback.xml,导致配置一直不生效

二、解决方案

  1. 修改配置文件名,将logback.xml改成logback-spring.xml。
  2. 使用标签,如下所示:
ini 复制代码
<springProperty scope="context" name="变量名" source="application中的属性名" defaultValue="默认值"/>
  1. 代码示例子

(1)application.yml

yaml 复制代码
# application.yml
spring:
  application:
    name: my-order-service
server:
  port: 8080
myapp:
  log:
    path: /var/logs/myapp

(2)logback-spring.xml

xml 复制代码
<configuration>
    <!-- 1. 引用 application.yml 中的属性 -->
    <!-- name: 在 logback 中使用的变量名 -->
    <!-- source: application.yml 中的完整属性路径 -->
    <springProperty scope="context" name="APP_NAME" source="spring.application.name" defaultValue="unknown-app"/>
    <springProperty scope="context" name="LOG_PATH" source="myapp.log.path" defaultValue="./logs"/>
    <springProperty scope="context" name="SERVER_PORT" source="server.port"/>

    <!-- 2. 在控制台输出格式中使用变量 -->
    <property name="CONSOLE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss} [${APP_NAME}] [%thread] %-5level %logger{36} - %msg%n"/>

    <!-- 控制台 Appender -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- 3. 在文件路径中使用变量 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/app.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/app.%d{yyyy-MM-dd}.log</fileNamePattern>
        </rollingPolicy>
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </root>
</configuration>
相关推荐
葫芦和十三5 小时前
图解 MongoDB 30|查询路由与广播查询:带片键定向,不带就广播
后端·mongodb·agent
葫芦和十三5 小时前
图解 MongoDB 29|分片键陷阱:jumbo chunk、孤儿文档和写入热点
后端·mongodb·agent
进击的程序猿~6 小时前
Go Zero源码阅读1
后端·golang
2601_961593427 小时前
Rust 开发环境配置繁琐?RustRover 开箱即用搞定编码调试
开发语言·后端·macos·rust
犀利豆9 小时前
AI in Harness(三)
人工智能·后端
IT_陈寒10 小时前
Java的Stream.parallel()把我CPU跑爆了,这种优化要谨慎
前端·人工智能·后端
子兮曰10 小时前
Bun 重写为 Rust:11天、64个Claude、16.5万美元,一次改变行业认知的激进实验
前端·后端·bun
子兮曰11 小时前
Node.js v26.5.0 深度解读:import Text、流式 ReadableStreamTee、以及隐藏的安全加固浪潮
前端·后端·node.js
子兮曰11 小时前
TypeScript 7.0 RC 深度解读:Go 重写完成,10 倍提速,编译器的「奇点时刻」
前端·后端·typescript
kosan11 小时前
.NET/C# 实战:我如何把登录验证码从“裸奔”改到“铜墙铁壁”
后端