- - PR -
ログファイルがどんどん作られちゃう
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-01-05 13:43
お世話になります。
ログ出力にjava.util.loggingを使用しようと考え、以下のようになコードを記述しました。
思ったようにログも出力されるのですが、JBOSSを再起動するたびにログファイルが作成されてしまいます。 test0.log test1.log test2.log ... と、いったように。 さらにログの内容はtest2.logがtest1.logに、test1.logがtest0.logに含まれています。 これは logger.addHandler(fh); がおかしいという事なのでしょうか。。。 既にあるファイルに対してappendしていくようにしたいのですが、どのようにすればよいのでしょうか? new FileHandler("d:/test%u.log",500,1,true);で4つ目の引数にtrueを指定しても思ったような形になりません。 JBOSSを再起動したとしてもtest0.log が500バイト未満のうちはtest0.logにappendしていってほしいのですが。。。 どなたかご教授いただけますでしょうか。よろしくお願いいたします。 <環境> JDK1.4 JBOSS3.2.3 Windows2K [ メッセージ編集済み 編集者: raimblue 編集日時 2005-01-05 13:44 ] | ||||||||
|
投稿日時: 2005-01-08 01:30
%u を付けているからではないですか? JavaDoc によると「"%u" 重複を解決する一意の番号」だそうですから、すでにファイルが存在する場合は重複しないように別のファイルが作成されてしまうのではないでしょうか? たとえば、%u の代わりに %g を使えば良いと思います。 | ||||||||
|
投稿日時: 2005-01-11 11:33
お世話になります。
>きよの様 %uを%gとしても同じでした(;_;) もう少し悩んでみます。 ありがとうございました。 | ||||||||
|
投稿日時: 2005-01-13 11:56
動作だけ見ると、LogInLogのコンストラクタが何度も呼ばれているように見えますよね。
JBOSSということはAPサーバーですので、例えば以下のようなことが起こっているのかも しれません。 1.java.util.logging.Loggerは、JBOSSのSystemClassLoaderからロードされる。 結果、ログ出力対象ファイルに用いられるLoggerインスタンスは、APサーバー全体 に対して1個だけ。(Logger#getLogger()は、その唯一のインスタンスへの参照を 返している) 2.com.hoge.Log.LogInLogは、デプロイした各アプリケーション毎のClassLoaderから それぞれロードされる。結果、LogInLogのstaticメンバ変数であるlogInLogイ ンスタンスは、APサーバー上ではアプリケーションごとに1個ずつ作成される。 3.結果、LogInLogのコンストラクタはAPサーバー全体を通して複数回コールされる。 一つのファイルに対する出力を行うFileHandlerが複数登録されることになる。 デバッガやログなどを利用して、LogInLogの呼び出し状況を確認してみるとよいかも。 もし↑のような現象が原因ならば、回避策としては、 1.APサーバーが持っているであろう設定ファイルに、ロギング用の設定を記述するよう にし、FileHandlerをアプリケーション層で生成しないようにする。 2.デプロイしたアプリケーションごとに出力先ファイルを分ける。 といったことになるでしょうか。 [ メッセージ編集済み 編集者: シュン 編集日時 2005-01-13 17:37 ] | ||||||||
|
投稿日時: 2005-01-17 19:24
お世話になります。
返事が遅くなり申し訳ありません。 シュン様> おおっ、APサーバー全体で1つのインスタンスのものがあるのですね! うーんJBOSSをもっと勉強せねば・・・ APサーバー全体でのSingletonクラスのようなものでしょうか。 結論から言うと解決いたしました。 シュン様の仰る通り何度も何度も複数登録されてしまっているからのようです。 結局FileHandlerのClose処理を行うようにすれば解決しました。 また、最初の質問も少し間違っていて、JBOSSを再起動ではなくアプリをデプロイし直す度に ログファイルが増加していました。 Closeを行わないでデプロイをするとFileHandlerのプロセスが握られたままで新たに デプロイしたアプリで実行すると増えていくようでした。 ご迷惑おかけしました。 皆様ありがとうございました。 |
1