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?
Czy Tomcat przekazywać zmienne systemowe z Java? Tomcat czasami robi zabawne rzeczy. –
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
Prawdopodobnie chcesz zamknąć to wydarzenie samodzielnie. Dobra robota. –