我有一个使用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”他们是财产占位符。
原文链接:https://www.f2er.com/xml/293236.html我认为你将回溯“变量”与Spring“Property Placeholder”混淆。
他们恰好使用相同的语法$ {…}。
logback什么都不了解Spring属性占位符机制,反之亦然。您需要根据logback文档配置您的logback变量,而不是在application.properties / application.yml中,这是严格的Spring(引导)概念。
编辑:
<property resource="application.properties" />
到logback.xml应该工作。