2012-03-08 10 views
2

getTail()というjava.util.logging.XMLFormatterには、物理​​ログファイルの最後の行を書き込むメソッドがあります。それは単に書き込みますXMLFormatterのgetTail()メソッドはどのように機能しますか?

</log> 

1行で単独で書き込みます。

誰かがgetTail()が呼び出される方法/時期を知っていますか?私は自分のコードでそれを呼び出すことはなかったし、とにかく最後の行を書いている。今、突然、そうではありません。私は明らかに何かを壊してしまったが、私がやったことやこれを修正する方法を考えることができれば、私は気にならない。私のログファイルは書き込まれていますが、私はそれを開くことができません。ロックされていると思われるコンパニオンファイルは、そのことを確認します。 (ログファイル名がFuzz.log.xmlの場合、他のファイルはFuzz.log.xml.lckと呼ばれ、そのファイルサイズは0です。このファイルを削除すると、ログファイルを再度編集できます。最後のログタグがありません)。ロックファイルを削除せずに手動でタイルを追加するだけで、ログを開くことができるように、ロギングコードでそのタグを書き直してください。

愚かどのような事は、私が働いてからgetTailを()維持するために行われている可能性が?

+0

多分別の質問は、私が問題の根本に到達するのに役立ちます。どのプロセスが物理ログファイルをクローズするか?つまり、ログファイルが通常閉じると、ロックファイルを削除してタグを追加する必要はありません。 –

答えて

0

通常、私はJDKロギングフレームワークがストリーム処理を処理することを期待しています。 "getTail()"が呼び出された場所を見ると、それがStreamHandler.flushAndClose()の一部として呼び出されていることがわかります。これは主にStreamHandler.close()から呼び出されます。ロギング機能のためのストリームは、正しく閉じている時はいつでも

Soは尾が書かれている、すなわち、アプリケーションが正常終了したとき。アプリケーションがクラッシュまたは強制終了した場合、ファイルを正しく閉じることができない可能性があります。

これらのことを調べる最も良い方法は、おそらくEclipseを使用し、「Java - > Installed JREs」のプリファレンスでJDK Sourceを使用できることを確認してから、すべてのEclipseブラウズ機能を使用して接続されています。

0

あなたは、このように閉じて強制することができますしたい場合:

FileHandler fileHandler = (FileHandler) yourLogger.getHandlers()[0]; 
fileHandler.flush(); 
fileHandler.close(); 

私は最初のハンドラが存在し、これは、ファイルハンドラであると仮定しています。あなたはこの状況を管理します。

関連する問題