実行中の2つのログファイルの出力をリアルタイムでマージする方法

実行中の2つのログファイルの出力をリアルタイムでマージする方法

私は2つの異なる方法を使用してLinux USBドライバがどのように機能するかを分析しました。

  1. 出力を確認してくださいusbmon。これは「オンライン」で送信される内容の16進ダンプビューです。
  2. カーネルドライバモジュールソースにステートメントを追加し、printk()それをカーネルに再ロードします。

cat /sys/kernel/debug/usb/usbmon/1uそれぞれとを通じてこれらのメソッドの出力を取得できますcat /var/log/kern.log

今私が望むのは、2つのファイルをリアルタイムでマージして、printk()ネットワーク経由で送信される16進行とインターリーブされたカーネルドライバに挿入されたログメッセージを表示できることです。たとえば、USBデータを送信することがわかっているドライバコードの先頭と末尾にステートメントを含めることができますprintk()usbmon

入力関数 sendImportantUSBData() // ドライバコードで printk()
0a ff bbbb ac 0993 b3332 // usbmon ログで関数を終了
sendImportantUSBData() // ドライバコードで printk()

tail単一ファイルの最後の数行を表示することが可能であることを知っています。また、タイミングの感度とマージされた行の順序の正確さへの影響に関する関連情報を見たことはありませんが、nツールがいくつかのマージを実行できることも知っています。時間に敏感なログを正確にマージしたり、マージのために比較的短い時間間隔を指定したりできるmultitail適切なツールはありますか?後者の場合、ドライバが。a)b)printk()usbmon

答え1

どうですかtail -F /sys/kernel/debug/usb/usbmon/1u /var/log/kern.log?これにより、2つのファイルの出力を「追跡」し、各ファイルの出力を表示するときに短いヘッダーを印刷します。

答え2

プログラミングをたくさんしたくないのであれば、とても簡単です。

log1とを混合すると仮定すると、log2結果は次のようになりますlog

バックグラウンドでlog1を監視し、ログに変更を追加します。tail -f log1 >> log &

log2で別のプロセス監視を開始するtail -f log2 >> log &

それを証明するために試してみてください。

echo ok1 >> log1; echo ok2 >> log2

今確認すればlog得ることができます。

確認1

確認2

答え3

私はこの例を探していましたが、他の目的に使ってみましたが、結果に満足していました。出力を次のファイルにリダイレクトしました。テール -F /sys/kernel/debug/usb/usbmon/1u /var/log/kern.log >> tail.output 毎秒3回、2つの異なるライブログのマージされた出力を取得します。ジッピーは本当にありがとう :-)

関連情報