Подтвердить что ты не робот

Log4j2 указывает относительный путь к домашнему директорию tomcat для FileAppender

Я пытаюсь настроить log4j2 для моего сервера tomcat, работающего локально. Я не могу подключить журналы к местоположению, которое относится к установке tomcat.

Если я укажу абсолютный путь, он будет работать. Если я использую относительный путь, он выводит его в положение System.getProperty("user.dir").

Но когда я пытаюсь использовать либо ${catalina.home}, либо ${catalina.base}, он не работает. Если я запускаю эти два системных свойства при запуске, они определяются и указывают на правильное расположение.

Кроме того,

  • Tomcat 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>

От 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})
4b9b3361

Ответ 1

Я решил свою проблему. Для системных свойств вам нужно префиксные переменные 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

Ответ 2

Спустя много часов, пытаясь решить свои проблемы с log4j2-протоколированием файлов с помощью Tomcat, я нашел еще одну возможную причину. Надеюсь, это спасет кого-то еще некоторое время по дороге!

У меня был каталог Tomcat, расположенный в /Library/Tomcat. В конце концов я попытался переустановить Tomcat, на этот раз разместив рабочий каталог в /usr/local с символической ссылкой на /Library/Tomcat. Это, наряду с предложением Моемарса о включении префикса sys, разрешило мои проблемы с протоколированием.