You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在log4j2.json中使用.properties文件定义的属性?

解决Log4j2配置中无法读取Spring Properties属性的问题

首先排查最容易忽略的低级错误:你在dev.properties里定义的属性是fr.xyz.pathLog,但配置时用的是${fr.xyz.path}——属性名少了Log后缀,这肯定无法被识别,先修正这个拼写问题。

如果修正后仍不生效,核心原因是Log4j2默认不会自动读取Spring的dev.properties文件属性,以下是几种可行的解决方式:

方法一:将Spring属性注入系统属性

在Spring配置类中,把目标属性加载到系统环境变量里,让Log4j2能通过系统属性读取到:

@Configuration
@PropertySource("classpath:dev.properties")
public class AppConfig {

    @Autowired
    private Environment env;

    @PostConstruct
    public void initSystemProperties() {
        String logPath = env.getProperty("fr.xyz.pathLog");
        System.setProperty("fr.xyz.pathLog", logPath);
    }
}

之后在log4j2.json中直接使用${fr.xyz.pathLog}即可引用该路径。

方法二:让Log4j2直接读取properties文件

在log4j2.json中配置Properties组件,指定加载dev.properties,再通过bundle:前缀引用属性:

{
  "configuration": {
    "properties": {
      "property": [
        {
          "name": "devProps",
          "value": "classpath:dev.properties"
        }
      ]
    },
    "appenders": {
      "File": {
        "name": "FileAppender",
        "fileName": "${bundle:devProps:fr.xyz.pathLog}/app.log"
      }
    },
    "loggers": {
      "root": {
        "level": "info",
        "appender-ref": {
          "ref": "FileAppender"
        }
      }
    }
  }
}

这里bundle:devProps:fr.xyz.pathLog的格式是:bundle:【自定义的properties资源名】:【属性键】。

方法三:Spring Boot场景简化方案

如果你的应用是Spring Boot且引入了spring-boot-starter-log4j2依赖,直接在log4j2.json中用${spring:fr.xyz.pathLog}就能引用Spring环境中的属性;或者在dev.properties里定义logging.file.path=${fr.xyz.pathLog},让Spring Boot自动传递给Log4j2。

注意:普通Spring应用要确保dev.properties已通过@PropertySource注解或XML的<context:property-placeholder>正确加载到Spring环境中。

内容的提问来源于stack exchange,提问作者James

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 12:40:16