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

我有一个使用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”他们是财产占位符。

我认为你将回溯“变量”与Spring“Property Placeholder”混淆。

他们恰好使用相同的语法$ {…}。

logback什么都不了解Spring属性占位符机制,反之亦然。您需要根据logback文档配置您的logback变量,而不是在application.properties / application.yml中,这是严格的Spring(引导)概念。

编辑:

快速查看logback文档后,添加

<property resource="application.properties" />

到logback.xml应该工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇