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>
相关推荐
李日灐2 小时前
<1>Linux基础指令:Linux 高频指令详解 + 文件与目录认知
linux·运维·服务器·开发语言·后端·命令
lolo大魔王2 小时前
Go语言的defer语句和Test功能测试函数
开发语言·后端·golang
rannn_1112 小时前
【Redis|高级篇3】Redis最佳实践|键值设计、批处理优化、服务端优化、服务器优化、集群还是主从
java·服务器·redis·后端·缓存
Cache技术分享2 小时前
384. Java IO API - Java 文件复制工具:Copy 示例完整解析
前端·后端
霸道流氓气质2 小时前
SpringBoot中集成LangChain4j实现集成阿里百炼平台进行AI快速对话
人工智能·spring boot·后端·langchain4j
lolo大魔王2 小时前
Go语言的结构体
开发语言·后端·golang
说点AI2 小时前
我的 Vibe Coding 工具箱:一个人如何从零做出一个产品
前端·后端
csdn_aspnet2 小时前
了解 ASP.NET Core 中的防伪技术
后端·asp.net·csrf·.net core
武子康2 小时前
大数据-270 Spark MLib-机器学习库快速入门(分类/回归/聚类/推荐)
大数据·后端·spark