3

Linux では、ファイルの入力ストリームを開くと、別のプロセスがそのファイルの名前を変更できます。そのため、ファイルがロールオーバーされても、ストリームから読み取ることができます。Windows では、入力ストリームを開くと、入力ストリームが閉じられるまでそのファイルの名前を変更できません。「名前変更」プロセスに影響を与えずにファイルを読み取るにはどうすればよいですか?

java.nio.FileChannel を使用してみました。異なるプロセス (Java プロセスの読み取りとメモ帳の書き込みなど) によるファイルへの同時の読み取りと書き込みには機能しますが、ファイルの名前変更には機能しません (たとえば、Java プロセスの読み取りですが、名前変更コマンドは機能しません)。

4

1 に答える 1

1

最も簡単な解決策は次のとおりです(コメントの1つからコピーしているだけです)

新しく追加された行を読み取った後、リーダーを閉じます。このようにして、ローテーションを実行しようとしている他のプロセスが成功します。しかし、ログのローテーションを行うプロセスは、他のプロセスがそれを読み取っていないことを確認するまで、数回試行する必要があります。

Apache commons IO Tailerはこれを行うことができます。

于 2013-03-01T15:31:48.033 に答える