アプリケーションによって書き込まれているログファイルを監視したいと思います。私は、行ごとにファイルを処理したい、またはその直後にファイルを書きたい。私は、ファイルがeofに達した後に拡張されたことを検出する方法を発見していません。別のアプリケーションとしてログファイルからデータを読み込んでいます。
コードはMacとPC上で動作する必要があり、どの言語でも構いませんが、私はC++とPerlに最も精通しています。
誰でも最良の方法を提案していますか?
アプリケーションによって書き込まれているログファイルを監視したいと思います。私は、行ごとにファイルを処理したい、またはその直後にファイルを書きたい。私は、ファイルがeofに達した後に拡張されたことを検出する方法を発見していません。別のアプリケーションとしてログファイルからデータを読み込んでいます。
コードはMacとPC上で動作する必要があり、どの言語でも構いませんが、私はC++とPerlに最も精通しています。
誰でも最良の方法を提案していますか?
Perlでは、File::Tailモジュールが必要なものを正確に処理します。
ジェネリック十分答え:
ほとんどの言語は、EOFに、何もデータが読み込まれなかったことを返します。ある間隔の後に再度読み込みを試みることができます。この時点からファイルが増えた場合、今回はオペレーティングシステムがデータを返します。
あなたは
tail -f
のエッセンスは、次のループである-f尾から標準入出力を読んで使用することができるはずです。
open IN, $file;
while(1) {
my $line = <IN>;
if($line) {
#process line...
} else {
sleep(1);
seek(IN,0,1);
}
}
close IN;
seekコールはEOFフラグをクリアすることです。
私はteeを介してアクションを出力すると思っていましたが、その後、teeで使用されたファイルをtail'ing(またはループabove)というファイルを使用しました。 Java用
は
http://www.informit.com/guides/content.aspx?g=java&seqNum=226
この優れた記事を参照してください