当前位置: 首页 > 知识库问答 >
问题:

无法在logback.xml中使用Spring属性占位符

周辰沛
2023-03-14

我有一个使用Logback的Spring Boot控制台应用程序。所有属性(应用程序和日志)都外部化到类路径中的标准application.properties文件中。这些属性在应用程序本身中可以很好地提取,但在logback.xml文件中不能提取。看起来好像是在Spring Boot启动之前处理了logback.xml,因此没有处理EL占位符。

使用FileNamePattern作为示例,在application.properties中,我有如下内容:

log.filePattern=/%d{yyyy/MM-MMMM/dd-EEEE}

在logback.xml中,我将得到以下内容:

<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <FileNamePattern>${log.logDirectory}${log.filePattern}.log
    </FileNamePattern>
</rollingPolicy>
ERROR in ch.qos.logback.core.joran.spi.Interpreter@24:25 - 
RuntimeException in Action for tag [rollingPolicy]
java.lang.IllegalStateException: FileNamePattern
[log.logDirectory_IS_UNDEFINEDlog.filePattern_IS_UNDEFINED.log]
does not contain a valid DateToken

谢谢回复@Gary!很高兴知道Spring EL和Logback的变量之间的区别...我以为是Spring负责为我解析这些变量。我确实有这个元素,但这让我开始思考。

我的application.properties文件在jar之外,所以Logback不知道在哪里找到它。通过将Spring相关属性保留在外部application.properties文件中,将日志记录相关属性移动到application-internal.properties文件(位于jar中)中,并将Logback指向该文件( ),所有操作都按预期进行!

共有1个答案

齐俊贤
2023-03-14

${...}不是Spring中的“Spring EL”;它们是属性占位符。

我认为您是在混淆logback“变量”和Spring“属性占位符”。

它们只是碰巧使用了相同的语法${...}

<property resource="application.properties" />
 类似资料:
  • 问题内容: 我有一个使用Logback的Spring Boot控制台应用程序。所有属性(针对应用程序和Logback)都被外部化为类路径中的标准application.properties文件。在应用程序本身中可以很好地拾取这些属性,但在logback.xml文件中不会拾取这些属性。在Spring Boot启动之前,似乎好像处理了logback.xml,因此未处理EL占位符。 以FileNameP

  • 问题内容: 我有我的配置: 我得到错误 我知道这可能缺少属性文件,但是我在类路径中恰好有它。有什么不见了? 我的web.xml: 问题答案: 你的应用程序中可能有多个。尝试在超类的方法上设置一个断点,看看在应用程序启动时是否多次调用了该断点。如果不止一个,则可能需要查看配置属性,以便你的应用程序可以正常启动。

  • 我不明白为什么不能在Spring-Boot中向application.properties文件中注入值。外部属性添加到logging.file变量中。我有一个application.properties文件,看起来如下所示 具有相应的Spring-boot应用程序类 请注意,如果我自己注入服务器端口号,那么在注入和启动应用程序时没有任何问题。 我在这个问题上兜圈子,弄不清自己做错了什么。

  • 我的数据库配置类: 和AppConfig: } 嗨,我上面有个错误,我不知道怎么修复,你能帮我吗?在添加这个bean之前,我的项目运行良好: }

  • 问题内容: 有谁知道我是否应该可以在预选赛中使用属性占位符作为表达式?我似乎无法正常工作。 我正在使用Spring 3.0.4。 XML: config.properties: 问题答案: 这可行。如果仅使用默认的spring bean名称,则可以省略服务名称。serviceA与ServiceA等 XML: Props:

  • 我在spring-context.xml中加载属性文件,并在${spring.profiles.active}.properties中给出外部属性文件的位置,该位置位于类路径中,并将该位置用作spring-context.xml中的placholder。我的spring-context.xml是: 我的dev.properties是: