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