I am trying to configure log4j2 for my tomcat server running locally. I am unable to pipe the logs to a location that is relative to the tomcat install.
If I specify an absolute path it works. If I use a relative path it outputs to the location of System.getProperty("user.dir")
.
But when I try to use either ${catalina.home}
or ${catalina.base}
it does not work. If I output those two system properties on startup, they are defined and point to the proper location.
Also,
-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
.My feeling is that Tomcat might not be fully initialized when it processes the log4j2.xml? Any ideas would be greatly appreciated!
Here is my 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>
From 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={org.apache.logging.log4j.core.config.AppenderRef@6e8ef177}, 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={org.apache.logging.log4j.core.config.AppenderRef@6a8ef455}, 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})
I solved my own issue. For system properties you need to prefix variables with 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>
Found it after re-reading this part of the documentation: http://logging.apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With