我真的很喜欢 Logback 对登录数据库的支持。但是,我在使用 Logback 的变量替换功能时遇到了问题,更具体地说,是在类路径上的属性文件中。
我的引用:http://logback.qos.ch/manual/configuration.html#variableSubstitution
所以我有一个多模块 Maven 项目。在我的 web 模块(生成一个 .war 文件)中,我在以下目录中有我的 Logback conf 文件:
src/main/resources
- logback.xml
- local.properties
- dev.properties
我的 logback.xml 文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property file="${env}.properties"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%X{messageId}] %-5level %logger{0} - %msg%n
</pattern>
</encoder>
</appender>
<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
<connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">
<dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">
<driverClass>${logback.db.driverClassName}</driverClass>
<jdbcUrl>${logback.db.url}</jdbcUrl>
<user>${logback.db.user}</user>
<password>${logback.db.password}</password>
</dataSource>
</connectionSource>
</appender>
<root level="debug">
<appender-ref ref="DB" />
</root>
</configuration>
所以当我启动我的 Tomcat 服务器时,我会像这样传入 ${env}:
-Denv=local
但是,当我启动服务器时出现以下错误:
17:45:22,782 WARN com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0 DriverManagerDataSource:107 - Could not load driverClass logback.db.driverClassName_IS_UNDEFINED
java.lang.ClassNotFoundException: logback.db.driverClassName_IS_UNDEFINED
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523)
看起来 Logback Joran 在定位属性文件时遇到了问题。
谁能告诉我我做错了什么?
最佳答案
正如我在评论中所说:
应该是:
<property resource="${env}.properties"/>
不是
<property file="${env}.properties"/>
关于java - Logback 变量替换无法在类路径上找到属性文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9935648/