2013-07-31 14 views
30

Próbuję skonfigurować log4j2 dla mojego serwera Tomcat działającego lokalnie. Nie mogę przesłać dzienników do lokalizacji, która jest względna w stosunku do instalacji tomcat.log4j2 podać względną ścieżkę do katalogu głównego tomcat dla FileAppender

Jeśli podam ścieżkę bezwzględną, działa. Jeśli użyję ścieżki względnej, wyświetli się ona w lokalizacji System.getProperty("user.dir").

Ale kiedy próbuję użyć albo ${catalina.home} lub ${catalina.base}, to nie działa. Jeśli wypiszę te dwie właściwości systemu podczas uruchamiania, są one zdefiniowane i wskazują właściwą lokalizację.

Również

  • Tomcat 7.0.26
  • serwlet 2,5
  • log4j2.0 beta 8
  • używamy slf4j z log4j2 za nim.
  • Konfiguruję wszystkie rejestratory tak, aby były asynchronizowane za pomocą zmiennej środowiskowej -DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector.

Mam wrażenie, że Tomcat może nie zostać w pełni zainicjalizowany podczas przetwarzania pliku log4j2.xml? Wszelkie pomysły będą mile widziane!

Oto mój log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration status="debug" name="LoggingConfig"> 
    <appenders> 
    <FastFile name="ALog" fileName="${catalina.home}/logs/test.log" immediateFlush="true" append="true"> 
     <PatternLayout> 
     <pattern>%d %p %c{1.} [%t] %m%n</pattern> 
     </PatternLayout> 
    </FastFile> 
    </appenders> 

    <loggers> 
    <logger name="a.namespace.dir" level="info" additivity="false"> 
     <appender-ref ref="ALog"/> 
    </logger> 

    <root level="info"> 
     <appender-ref ref="ALog"/> 
    </root> 
    </loggers> 

</configuration> 

Od catalina.out

2013-07-31 11:22:00,313 DEBUG Calling createAppender on class org.apache.logging.log4j.core.appender.FastFileAppender for element FastFile with params(fileName="${catalina.home}/logs/test.log", append="true", name="ALog", immediateFlush="true", suppressExceptions="null", PatternLayout(%d %p %c{1.} [%t] %m%n), null, advertise="null", advertiseURI="null", Configuration(LoggingConfig)) 

2013-07-31 11:22:00,315 DEBUG Starting FastFileManager ${catalina.home}/logs/test.log 

2013-07-31 11:22:00,316 DEBUG Calling createAppenders on class org.apache.logging.log4j.core.config.plugins.AppendersPlugin for element appenders with params(appenders={ALog}) 

2013-07-31 11:22:00,317 DEBUG Generated plugins in 0.000016000 seconds 

2013-07-31 11:22:00,318 DEBUG Calling createAppenderRef on class org.apache.logging.log4j.core.config.AppenderRef for element appender-ref with params(ref="ALog", level="null", null) 

2013-07-31 11:22:00,320 DEBUG Calling createLogger on class org.apache.logging.log4j.core.config.LoggerConfig for element logger with params(additivity="false", level="info", name="a.namespace.dir", includeLocation="null", appender-ref={[email protected]}, properties={}, Configuration(LoggingConfig), null) 

2013-07-31 11:22:00,321 DEBUG Calling createAppenderRef on class org.apache.logging.log4j.core.config.AppenderRef for element appender-ref with params(ref="ALog", level="null", null) 

2013-07-31 11:22:00,322 DEBUG Calling createLogger on class org.apache.logging.log4j.core.config.LoggerConfig$RootLogger for element root with params(additivity="null", level="info", includeLocation="null", appender-ref={[email protected]}, properties={}, Configuration(LoggingConfig), null) 

2013-07-31 11:22:00,323 DEBUG Calling createLoggers on class org.apache.logging.log4j.core.config.plugins.LoggersPlugin for element loggers with params(loggers={a.namespace.dir, root}) 

Odpowiedz

90

mi rozwiązać mój własny problem. Aby uzyskać właściwości systemu, należy wstępnie ustawić zmienne za pomocą sys:.

<FastFile name="ALog" fileName="${sys:catalina.home}/logs/test.log" immediateFlush="true" append="true"> 
    <PatternLayout> 
    <pattern>%d %p %c{1.} [%t] %m%n</pattern> 
    </PatternLayout> 
</FastFile> 

Znaleziono go po ponownym przeczytaniu tej części dokumentacji: http://logging.apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution

+3

+1 za dokumentację, mimo że znalazłeś własną odpowiedź. Pomógł mi przynajmniej. –

+1

'catalina.base' wydaje się bardziej odpowiednie dla systemów uniksowych, ponieważ wskazuje'/var/lib' zamiast '/ usr/bin'. – BrunoJCM

+0

Dzięki temu wszystko było na miejscu. –

0

Po wielu godzinach próbując rozwiązać swoje własne problemy z logowaniem plików log4j2 z Tomcat znalazłem inną możliwą przyczynę. Mam nadzieję, że to oszczędza komuś innemu czas w dół drogi!

Posiadałem mój katalog Tomcat pod numerem /Library/Tomcat. Na samym końcu próbowałem ponownie zainstalować Tomcat, tym razem umieszczając katalog roboczy w /usr/local z dowiązaniem symbolicznym do /Library/Tomcat. To wraz z sugestią Moemarsa dotyczącą prefiksu sys rozwiązało problemy z logowaniem.

Powiązane problemy