log4j2 укажите относительный путь к tomcat home dir для FileAppender
Я пытаюсь настроить log4j2 для моего сервера tomcat, работающего локально. Я не могу передать журналы в расположение, которое находится относительно установки tomcat.
Если я указываю абсолютный путь, он работает. Если я использую относительный путь, он выводит к местоположению System.getProperty("user.dir")
.
${catalina.home}
, либо ${catalina.base}
, это не работает. Если я вывожу эти два системных свойства при запуске, они определяются и указывают на правильное расположение.
Также,
- кот 7.0.26
- сервлет 2.5
- log4j2. 0 beta 8
- мы используем slf4j с log4j2 позади него.
- я настраиваю все регистраторы на асинхронность через переменную окружения
-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
.
Мне кажется, что Tomcat может быть не полностью инициализирован, когда он обрабатывает log4j2.в XML? Любые идеи будут высоко оценены!
Вот мой 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>
От Каталины.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})
2 ответа:
Я решил свой собственный вопрос. Для системных свойств необходимо префиксировать переменные с помощью
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>
Нашел его после повторного прочтения этой части документации: http://logging.apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution
После долгих часов попыток решить мои собственные проблемы с log4j2 файловым журналированием с Tomcat я нашел другую возможную причину. Надеюсь, это сэкономит кому-то время в будущем!
У меня был каталог Tomcat, расположенный в
/Library/Tomcat
. В конце концов, я попытался переустановить Tomcat, на этот раз поместив рабочий каталог в/usr/local
с символической ссылкой на/Library/Tomcat
. Это, наряду с предложением Moemars о включении префиксаsys
, решило мои проблемы с журналом.