web-dev-qa-db-ja.com

log4j2は、FileAppenderのTomcatホームディレクトリへの相対パスを指定します

ローカルで実行しているTomcatサーバーのlog4j2を構成しようとしています。 Tomcatのインストールに関連する場所にログをパイプできません。

絶対パスを指定すると機能します。相対パスを使用すると、System.getProperty("user.dir")の場所に出力されます。

しかし、${catalina.home}または${catalina.base}のいずれかを使用しようとすると、機能しません。起動時にこれら2つのシステムプロパティを出力すると、それらは定義され、適切な場所をポイントします。

また、

  • Tomcat 7.0.26
  • サーブレット2.5
  • log4j2.0ベータ8
  • 背後にlog4j2を備えたslf4jを使用しています。
  • 環境変数-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={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})
43
Moemars

私は自分の問題を解決しました。システムプロパティの場合、変数の前に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

111
Moemars

Tomcatでのlog4j2ファイルロギングの問題を解決しようと何時間も試してみたところ、別の原因が見つかりました。これにより、誰か他の人の時間を節約できることを願っています!

/Library/TomcatにTomcatディレクトリがありました。最後に、Tomcatを再インストールしてみました。今回は、/usr/localへのシンボリックリンクを使用して、/Library/Tomcatに作業ディレクトリを配置しました。これは、sysプレフィックスを含めることのMoemarsの提案とともに、ロギングの問題を解決しました。

0
Pat Putnam