我有一个使用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不知道在哪里找到它。通过保持我的春节,相关性在我的外部application.properties文件,移动测井相关性为application-
internal.properties文件(位于 里面 的罐子),并指向的logback到 该 文件(<property resource="application-internal.properties" />
)得到的一切工作正常!
${...}
在春季不是“ Spring EL”;他们是财产占位符。
我认为您正在将logback“变量”与Spring“属性占位符”混淆。
它们恰好使用相同的语法${...}
。
logback对Spring属性占位符机制一无所知,反之亦然。您需要根据logback文档而不是application.properties
/
来配置logback变量,application.yml
严格来说,/ 是Spring(boot)概念。
编辑:
快速查看了Logback文档后,添加
<property resource="application.properties" />
到logback.xml
应该工作。
我有一个使用Logback的Spring Boot控制台应用程序。所有属性(应用程序和日志)都外部化到类路径中的标准application.properties文件中。这些属性在应用程序本身中可以很好地提取,但在logback.xml文件中不能提取。看起来好像是在Spring Boot启动之前处理了logback.xml,因此没有处理EL占位符。 使用FileNamePattern作为示例,在ap
问题内容: 我有我的配置: 我得到错误 我知道这可能缺少属性文件,但是我在类路径中恰好有它。有什么不见了? 我的web.xml: 问题答案: 你的应用程序中可能有多个。尝试在超类的方法上设置一个断点,看看在应用程序启动时是否多次调用了该断点。如果不止一个,则可能需要查看配置属性,以便你的应用程序可以正常启动。
我不明白为什么不能在Spring-Boot中向application.properties文件中注入值。外部属性添加到logging.file变量中。我有一个application.properties文件,看起来如下所示 具有相应的Spring-boot应用程序类 请注意,如果我自己注入服务器端口号,那么在注入和启动应用程序时没有任何问题。 我在这个问题上兜圈子,弄不清自己做错了什么。
我的数据库配置类: 和AppConfig: } 嗨,我上面有个错误,我不知道怎么修复,你能帮我吗?在添加这个bean之前,我的项目运行良好: }
问题内容: 有谁知道我是否应该可以在预选赛中使用属性占位符作为表达式?我似乎无法正常工作。 我正在使用Spring 3.0.4。 XML: config.properties: 问题答案: 这可行。如果仅使用默认的spring bean名称,则可以省略服务名称。serviceA与ServiceA等 XML: Props:
我在spring-context.xml中加载属性文件,并在${spring.profiles.active}.properties中给出外部属性文件的位置,该位置位于类路径中,并将该位置用作spring-context.xml中的placholder。我的spring-context.xml是: 我的dev.properties是: