2012-03-30 4 views
13

Bardzo podoba mi się wsparcie logbackowe do zalogowania się do bazy danych. Mam jednak problem z używaniem funkcji podstawiania zmiennych Logback, a konkretniej z pliku właściwości w ścieżce klas.Zastąpienie zmiennej logback nie może zlokalizować pliku właściwości w ścieżce klasy

Moja referencyjny: http://logback.qos.ch/manual/configuration.html#variableSubstitution

Mam więc projekt Maven wielomodułowego. W moim module internetowej (która generuje plik .war), mam pliki conf Logback w następującym katalogu:

src/main/reesources 
- logback.xml 
- local.properties 
- dev.properties 

Moja logback.xml wygląda następująco:

<?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> 

Więc kiedy przynieść się z serwerem Tomcat, chciałbym przekazać na $ {env} jak ten:

-Denv=local 

jednak mam następujący błąd, gdy wychowana serwer:

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) 

Wygląda na to, że logback Joran miał problem ze zlokalizowaniem pliku właściwości.

Czy ktoś może mi powiedzieć, co zrobiłem źle?

+0

Czy Tomcat przekazywać zmienne systemowe z Java? Tomcat czasami robi zabawne rzeczy. –

+2

Mój szef właśnie pomógł mi rozwiązać mój problem, patrząc ponad moimi ramionami. Zamiast używać '', powinienem użyć ''. Może czas wracać do domu :) – scabbage

+0

Prawdopodobnie chcesz zamknąć to wydarzenie samodzielnie. Dobra robota. –

Odpowiedz

16

Jak powiedziałem w komentarzach:

Powinno być:

<property resource="${env}.properties"/> 

Nie

<property file="${env}.properties"/>