ログ ファイルを継続的に解析していて、ローテーションが発生したことを検出した場合、これを処理するためのベスト プラクティスは何ですか?
- 新しい filePointer (ローテーションされたファイルの終わり) を反映するように内部ハッシュマップを更新します
- または、ハッシュマップを 0 に更新して、ローテーションされたファイルを最初から読み取れるようにする必要があります
私の懸念は、状況の異常の場合です。2 上記のように、大きなファイルを最初から間接的に解析し、ホストに大きな負荷をかける可能性があります。ただし、いいえを使用する場合。1 ログ ファイルを解析していた重要な情報を見逃す可能性があります。
これは私がまとめたコードです。
currentFilePointer = util.FileManagement.getLastFilePointerFromFile(file.getName());
lastFilePointer = Long.parseLong(lastReadFiles_.get(file.getName()).toString());
if (currentFilePointer < lastFilePointer) // file has grown
{
processLineByLine(file.getName(), currentFilePointer, lastFilePointer);
} else if (currentFilePointer > lastFilePointer) // file has been rotated
{
lastReadFiles_.put(file.getName(), currentFilePointer); // Option 1
}