我有一个使用Logback的Spring Boot控制台应用程序。所有属性(包括应用程序和Logback的属性)都外部化到类路径下的标准application.properties文件中。这些属性在应用程序本身中很好地被接受,但在logback.xml文件中没有被接受。似乎logback.xml在Spring Boot启动之前被处理,因此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负责为我解析这些变量。 我确实有< strong>元素,但那让我思考。
我的application.properties文件在jar外部,因此Logback不知道在哪里找到它。通过将与Spring相关的属性保留在我的外部application.properties文件中,将日志记录相关属性移动到位于内部的application-internal.properties文件中,并将Logback指向<property resource="application-internal.properties" />
文件,使一切都按预期工作!