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>
相关推荐
Lee川2 小时前
LangChain 加持:后端 AI 流式对话的优雅实现
后端
子兮曰4 小时前
Bun v1.3.14 深度解析:Image API、HTTP/3、全局虚拟存储与五十项变革
前端·后端·bun
ltl4 小时前
Self-Attention:让序列自己看自己
后端
楼兰公子4 小时前
buildroot 在编译rust时裁剪平台类型数量的方法
开发语言·后端·rust
吴声子夜歌4 小时前
Go——并发编程
开发语言·后端·golang
释怀°Believe4 小时前
Spring解析
java·后端·spring
Cosolar5 小时前
大模型应用开发面试 • 每日三题|Day 003|多Agent系统中的通信协议、冲突解决和一致性保障
人工智能·后端·面试
汪汪大队u5 小时前
续:从 Docker Compose 到 Kubernetes(2)—— 服务优化与排错
网络·后端·物联网·struts·容器
无风听海6 小时前
MapStaticAssets()深度解析:ASP.NET Core 静态资源交付的现代范式
后端·asp.net
geovindu7 小时前
go: Lock/Mutex Pattern
开发语言·后端·设计模式·golang·互斥锁模式