gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 13:43:44 29 4
gpt4 key购买 nike

我有一个使用 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 文件(位于 inside jar 中),并将 Logback 指向 文件(<property resource="application-internal.properties" />)让一切都按预期工作!

最佳答案

从 Spring Boot 1.3 开始,您有一种更好的方式将 spring 属性添加到 logback-spring.xml 配置中:

现在您可以添加一个“springProperty”元素。

<springProperty name="destination" source="my.loggger.extradest"/>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${destination}</file>
...
</file>
</appender>

https://github.com/spring-projects/spring-boot/commit/055ace37f006120b0006956b03c7f358d5f3729f

编辑:感谢安德斯

…………

关于java - 无法在 logback.xml 中使用 Spring 属性占位符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29322709/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com