回転バッファ型ファイル記録ユーティリティ

回転バッファ型ファイル記録ユーティリティ

stdout / stderrに多くのログを生成するサーバーをデバッグしようとしています。最後のN行をファイルにリダイレクトします。tcpdump's -C&フラグ-Wの回転バッファ機能に似ています。サーバーの実行中にログを見てログを投げることができれば良いと思います(cp他のファイルで見ることができます)。これを行うことができるユーティリティはありますか?このツールについて私が知っているように、logrotateこのツールは繰り返し実行する必要があります。私はこれが私のニーズを満たしていないと思います。私が望むもの:

serverd -d | $TOOL -n 100 srv.log

...いつでもsrv.log出力の最後の100行が含まれますserverd

答え1

ファイルまたは入力ストリームの最後のN行のみを取得するために使用できますtail

command | tail -n 100 > file

しかし、スピンストリームの最後の100行が常にログファイルにあることを望むようです。これは簡単ではありません。定期的に行を削除してログファイルを切り捨てたり、logrotateなどのシステムを使用して古いデータをスクリーニングすることもできますが、100行のFIFOタイプのログファイルを維持する簡単な方法はありません。

答え2

私は元のポスターが今まで解決策を見つけたと確信しています。このトピックを読むことができる他の人のための別の記事があります。

Curtail は、次のコマンドを使用してプログラム出力のサイズを制限し、最後の 200 MB の出力を保持します。

$ run_program | curtail -s 200M myprogram.log

引用する

メモ:私はこの回答にリンクされているソフトウェアの管理者です...

答え3

Apacheにはというプログラムがありますrotatelogs

ログを増やしたいサイズに関係なく、サイズの半分を選択し、ログファイルの数を2に設定します。

<yourlogGenerator>|rotatelogs -n 2 logfile 5M

2 つの 5M ログファイルが生成され、ファイル間でローリングされます。

これは循環ログの完全な説明

追加してから-L linknameできます。tail -f linkname

関連情報