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

前端之家收集整理的这篇文章主要介绍了在logback.xml中无法使用Spring属性占位符前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个使用Logback的Spring启动控制台应用程序。所有属性(对于应用程序以及Logback)都会在类路径中外部化为标准的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

类似的代码在其他Spring(而不是Spring Boot)应用程序中工作正常,所以我很好奇,如果Spring Boot只是有点不一样。

解:

感谢您的回复@Gary!很高兴知道Spring EL和Logback的变量之间的区别…我认为是负责为我解析这些变量的Spring。我确实有这个元素,但这让我想到了。

我的application.properties文件在jar之外,所以Logback不知道在哪里找到它。通过将我的Spring相关属性保存在我的外部application.properties文件中,将日志相关属性移动到application-internal.properties文件(位于jar内),并将Logback指向该文件(< property resource =“application -internal.properties“/>)让所有的工作按预期!

Spring中的$ {…}不是“Spring EL”他们是财产占位符。

我认为你将回溯“变量”与Spring“Property Placeholder”混淆。

他们恰好使用相同的语法$ {…}。

logback什么都不了解Spring属性占位符机制,反之亦然。您需要根据logback文档配置您的logback变量,而不是在application.properties / application.yml中,这是严格的Spring(引导)概念。

编辑:

快速查看logback文档后,添加

<property resource="application.properties" />

到logback.xml应该工作。

原文链接:https://www.f2er.com/xml/293236.html

猜你在找的XML相关文章