3

log4jを利用するWindowsサーバー環境のWebsphereで実行されているアプリケーションがあります。システムはログを記録しており、log4j.properties(20KB-以下を参照)で定義されているMaxFileSize制限に準拠しているように見えますが、ログファイルをローリングしていません。むしろ、それは単に既存のログファイルを上書きしているだけです。

Websphereで定義されたlog4j.propertiesファイルは次のとおりです。

log4j.rootLogger=debug, file

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=F:\\<log_file_directory\\<log_file_name>.log
log4j.appender.file.MaxFileSize=20KB
log4j.appender.file.MaxBackupIndex=50
log4j.appender.file.Append=true
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

私の理論では、log4jがファイルをロールしようとしたときに、アプリケーション/ JVMがログファイルへの参照を保持しており、Windowsはそのファイルが使用中であることを確認し、ファイルの移動を阻止しています。しかし、私はこれを確かに知りません。

ログファイルがロールオーバーされない理由を誰かが見ていますか?それとも私の理論は正しいでしょうか?

4

1 に答える 1

3

私の問題の解決策は、log4jをWebSphere内の共有jarファイルとして設定することでした。個々のアプリケーションには、log4jに対して開かれたファイル記述子があり、ログがに当たったときにログがローリングするのを防ぎましたMaxFileSize

log4jを共​​有jarとして設定し、サーバーをバウンスすると、ログは期待どおりにロールされました。私はこれを複数のサイズでテストしMaxFileSize、すべてが期待どおりに機能しました。

于 2013-03-19T19:53:54.870 に答える