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

我有一个使用Logback的Spring

Boot控制台应用程序。所有属性(针对应用程序和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不知道在哪里找到它。通过保持我的春节,相关性在我的外部application.properties文件,移动测井相关性为application-

internal.properties文件(位于 的罐子),并指向的logback到 文件(<property

resource="application-internal.properties" />)得到的一切工作正常!

回答:

${...}在春季不是“ Spring EL”;他们是财产占位符。

我认为您正在将logback“变量”与Spring“属性占位符”混淆。

它们恰好使用相同的语法${...}

logback对Spring属性占位符机制一无所知,反之亦然。您需要根据logback文档而不是application.properties/

来配置logback变量,application.yml严格来说,/ 是Spring(boot)概念。

快速查看了Logback文档后,添加

<property resource="application.properties" />

logback.xml应该工作。

以上是 无法在logback.xml中使用Spring属性占位符 的全部内容, 来源链接: utcz.com/qa/404896.html

回到顶部