相关疑难解决方法(0)

无法在logback.xml中使用Spring Property Place

我有一个使用Logback的Spring Boot控制台应用程序.所有属性(对于应用程序以及对于Logback)都被外部化到类路径中的标准application.properties文件中.这些属性在应用程序本身中很好地被选中,但是在logback.xml文件中没有被选中.看起来好像在Spring Boot启动之前处理了logback.xml,因此不会处理EL占位符.

使用FileNamePattern作为示例,在application.properties中,我有这样的事情:

log.filePattern=/%d{yyyy/MM-MMMM/dd-EEEE}
Run Code Online (Sandbox Code Playgroud)

在logback.xml中,我会这样:

<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <FileNamePattern>${log.logDirectory}${log.filePattern}.log
    </FileNamePattern>
</rollingPolicy>
Run Code Online (Sandbox Code Playgroud)

运行应用程序时,我会看到以下错误:

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
Run Code Online (Sandbox Code Playgroud)

类似的代码在其他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" />)得到的一切工作正常!

java spring logback spring-boot

34
推荐指数
3
解决办法
3万
查看次数

标签 统计

java ×1

logback ×1

spring ×1

spring-boot ×1