我使用的是logback版本1.0.13。 要从logback读取外部属性资源,我使用了JNDI条目(在Tomcat上下文中定义):
...
<insertFromJNDI env-entry-name="java:comp/env/app.config.path" as="app.config.path" />
<property resource="${app.config.path}" />
....
问题:logback找不到我的JNDI资源:$ {app.config.path} = file:/// D:/temp/application.properties
ERROR in ch.qos.logback.core.joran.action.PropertyAction - Could not find resource [file:///D:/temp/application.properties]
不适用于其他网址,例如:file://D:/, file:/D:/, file:////D:/,...
有什么建议吗?
答案 0 :(得分:2)
正如Bidit Kumar指出的那样,文件方法也有效。在我的情况下,我有类似的问题,我的解决方案如下(我应用解决方案2)
解决方案:
<property
file="C:\myproject\src\main\resources\com\mycompany\app.properties"/>
<property resource="\com\mycompany\app.properties"/>
答案 1 :(得分:1)
语言: Java
应用程序: Spring Boot应用程序
项目: Maven
记录:重新登录
容器:(用于开发的Jetty |用于生产的Tomcat)
在我们的项目中,资源根目录有logback.xml。该文件需要访问特定的应用程序属性。在下面的示例中,我们需要访问的属性为logging.home.dir
,它将存储为LOGGER_HOME
。
示例:logback.xml
<configuration>
<property name="LOGGER_HOME" value="${logging.home.dir}" />
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOGGER_HOME}/application.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- other setting -->
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!-- other setting -->
</encoder>
</appender>
</configuration>
通常,对于开发人员来说,可以使用默认的应用程序属性文件application.properties
来保存所有必需的属性,但是对于生产而言,此文件已被外部化。
发展
application.properties
logging.home.dir=temp/logs/
application.proerties
文件在类路径中可用,就可以使用<property resource="application.properties" />
在logback.xml中对其进行引用生产
Location: /opt/production/tc8-java8/my_wonderfull_app/application-prod.properties
application-prod.properties
logging.home.dir=application/logs/
要允许登录使用外部属性文件,您需要执行以下操作:
步骤1::启动应用程序时,您需要添加一个VM选项,指示在何处加载外部属性文件:
-Dmy.wonderful.app.external.properties.file=/opt/production/tc8-java8/my_wonderfull_app/application-prod.properties
步骤2:现在,您可以在登录文件中使用
<property file="${my.wonderful.app.external.properties.file}" /> <!-- note this MUST match the VM option name -->
<property name="LOGGER_HOME" value="${logging.home.dir}" /> <!-- property key from the file -->
应用程序VM选项
-D my.wonderful.app.external.properties.file
= / opt / production / tc8-java8 / my_wonderfull_app / application-prod.properties
Logback.xml
<属性文件=“ $ {{my.wonderful.app.external.properties.file
}”“ />
注1:对于Intellij,可以通过运行/调试配置> Spring Boot> [配置>环境>'VM选项:']
添加VM选项。注2:对于Tomcat,可以在/bin/setenv.sh中添加VM选项。 CATALINA_OPTS = -Dmy.wonderful.app.external.properties.file = / opt / production / tc8-java8 / my_wonderfull_app / application-prod.properties
答案 2 :(得分:0)
尝试使用file =“$ {app.config.path}”而不是resource =“$ {app.config.path}”
<强> 强>
和$ {app.config.path} = D:/ ...
检查日志记录文档以获取更多详细信息:http://logback.qos.ch/manual/configuration.html
答案 3 :(得分:0)
SpringApplication在以下位置从application.properties文件加载属性,并将它们添加到Spring Environment:
如果您不喜欢application.properties(在dev,stage,生产环境中希望与之不同的情况)作为配置文件名,则可以通过指定spring.config.name环境来切换到另一个文件名。属性。您还可以通过使用spring.config.location环境属性来引用显式位置
您可以尝试以下操作(Eclipse)
在运行配置中使用适当的值设置环境变量SPRING_CONFIG_LOCATION和SPRING_CONFIG_NAME。
在logback.xml中,添加以下属性
<property
file="${SPRING_CONFIG_LOCATION}${SPRING_CONFIG_NAME}.properties" />
现在,您可以按以下方式访问属性文件中存在的属性(例如variablename.xyz)
<property name="MY_PROPERTY" value="${variablename.xyz}" />