15

私のサーブレット ベースの Web アプリは、再デプロイ時に Log4j ログ ファイルを閉じることができず、ファイル記述子のリークが発生し、サーブレットに含まれる「開いているファイルが多すぎる」ために停止することがあります。

ContextListener があります。log4j にシャットダウンしてすべてのリソースを解放するように伝えるには、contextDestroyed() に何を入れればよいですか?

javadoc をざっと調べてみると、shutdown() メソッドを使用した Hierachery クラスが明らかになりました。現在の Hierachery を実際に取得する方法がわかりません。javadoc には、このクラスにはユーザーが操作できるコンポーネントが含まれていないと記載されています :)

4

2 に答える 2

19

これを試して:

org.apache.log4j.LogManager.shutdown();

ただし、発生している問題は奇妙なものであり、発生するべきではありません。使用している JVM、コンテナ、log4j のバージョンは何ですか?

于 2009-05-08T11:01:14.830 に答える
1

私は同じ問題を抱えていましたが、私の解決策には2つのステップが必要でした:

LogManager.shutdown()まず、サーブレットdestroy()メソッドから呼び出す必要がありました。

次にclose()、独自の Appender 実装 ( のサブクラスAppenderSkeleton) のメソッドを修正して、 からのアペンダーを適切に閉じる必要がありましたgetAllAppenders()

于 2010-11-15T13:52:11.170 に答える