2

Springでは、ロギングを解決するためにlog4jを含むslf4jがあります。

log4j.xml構成に相対パスを入れましたが、NetbeansTomcatと独立したApacheTomcatでアプリを実行すると、相対パスが異なり、手動で変更する必要があります。

私の考えは、Spring Controllerからコンテキストrealpathを取得し、実行時にlog4j構成に設定することです。しかし、私は知りません...

Spring Controllerからlog4jのファイルパスパラメータを変更するにはどうすればよいですか?

4

1 に答える 1

2

あなたが試すための2つの提案:

WebAppRootListenerをweb.xmlに追加します-これにより、Webアプリケーションのルートを指すシステムプロパティが構成されます(デフォルトはですwebapp.rootが、context-paramを使用してカスタマイズできます-Javadocリンクを参照)。 log4j.properties / xmlファイル:

<listener>
    <listener-class>org.springframework.web.util.WebAppRootListener<listener-class>
<listener>

<!-- log4.appender.File=${webapp.root}/logs/web-app.log -->

または、web.xmlでLog4jConfigListenerを使用します(これは最終的にLog4jConfigurerに委任されます)-これは上記と同様ですが、カスタムlog4j configuファイルを定義でき、Webアプリケーションがlog4jconfigファイルの変更を監視することもできます実行時に作成され、ロガーを自動的に更新します。

<context-param>
    <!-- Configure Log4J from the following config file location -->
    <param-name>log4jConfigLocation</param-name>
    <param-value>/WEB-INF/log4j.xml</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener<listener-class>
<listener>

また、上記のJavadocを詳しく読むことをお勧めします-Tomcatでの複数のWebアプリのデプロイとシステムプロパティの共有に関していくつかの落とし穴がありますが、これはすべて回避できます(各Webアプリにカスタムキーを提供するのではなく、デフォルト${webapp.root}

于 2012-04-10T10:34:49.543 に答える