无法在日志中使用 Spring 属性占位符.xml溶液:
我有一个使用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 不知道在哪里可以找到它。通过将我的 Spring 相关属性保存在我的外部 application.properties 文件中,将与日志记录相关的属性移动到 application-internal.properties 文件(位于 jar 内部),并将 Logback 指向该文件 () 可以使一切按预期工作!<property resource="application-internal.properties" />