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>
相关推荐
2601_953720824 小时前
【计算机毕业设计】基于Spring Boot的心理健康咨询与评测系统的设计与实现
java·spring boot·后端
东方小月5 小时前
从零开发一个 Coding Agent(四):使用状态机校验大模型事件流
前端·人工智能·后端
都叫我大帅哥5 小时前
“让AI修就行”?我劝你收回这句话——来自一位Java博主的硬核反常识
后端
whyfail6 小时前
前端学 Spring Boot(8):接口为什么越用越慢?
前端·spring boot·后端
Muscleheng7 小时前
Spring Boot 3.x 集成 DeepSeek 实现 Function Calling(工具调用)
人工智能·spring boot·后端·ai·spring ai·deepseek
@航空母舰7 小时前
SpringBoot通过Map实现天然的策略模式
java·spring boot·后端
IT_陈寒8 小时前
JavaScript的this又双叒叕让我怀疑人生了
前端·人工智能·后端
陈随易8 小时前
MCP协议第5次更新,从打电话到微信聊天的巨大变革
前端·后端·程序员
65岁退休Coder8 小时前
LangChain v1.3.4 笔记 - 06 RAG 检索增强生成
后端