Ich versuche, log4j2 für meinen Tomcat-Server zu konfigurieren, der lokal ausgeführt wird. Ich kann die Protokolle nicht an einen Speicherort weiterleiten, der relativ zur Tomcat-Installation ist.
Wenn ich einen absoluten Pfad spezifiziere, funktioniert es. Wenn ich einen relativen Pfad verwende, wird dieser an die Position von System.getProperty("user.dir")
ausgegeben.
Aber wenn ich versuche, entweder ${catalina.home}
Oder ${catalina.base}
Zu verwenden, funktioniert es nicht. Wenn ich diese beiden Systemeigenschaften beim Start ausgebe, werden sie definiert und verweisen auf den richtigen Speicherort.
Ebenfalls,
-DLog4jContextSelector=org.Apache.logging.log4j.core.async.AsyncLoggerContextSelector
Asynchron sind.Ich habe das Gefühl, dass Tomcat möglicherweise nicht vollständig initialisiert ist, wenn es die Datei log4j2.xml verarbeitet. Irgendwelche Ideen wäre sehr dankbar!
Hier ist mein 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>
Aus 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})
Ich habe mein eigenes Problem gelöst. Für Systemeigenschaften müssen Sie Variablen das Präfix sys:
Voranstellen.
<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>
Fand es nach dem erneuten Lesen dieses Teils der Dokumentation: http://logging.Apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution
Nachdem ich viele Stunden lang versucht hatte, meine eigenen Probleme mit der Protokollierung von log4j2-Dateien mit Tomcat zu lösen, fand ich eine andere mögliche Ursache. Hoffentlich spart dies jemand anderem etwas Zeit!
Ich hatte mein Tomcat-Verzeichnis in /Library/Tomcat
. Am Ende habe ich versucht, Tomcat neu zu installieren. Diesmal habe ich das Arbeitsverzeichnis in /usr/local
mit einem Symlink zu /Library/Tomcat
. Zusammen mit Moemars Vorschlag, das Präfix sys
einzufügen, löste dies meine Probleme bei der Protokollierung.