複数のファイルでキーワードを継続的に追跡し、各レポート行の先頭にファイル名を含める方法

複数のファイルでキーワードを継続的に追跡し、各レポート行の先頭にファイル名を含める方法
tail -f a/b/c.log d/e/f.log

次のログを記録します。

==> a/b/c.log <==
xxx
yyy
Exception happened 1
zzz

==> d/e/f.log <==
rrr
Exception happened 2
sss

次のように「Exception」を含む行を選択するようにコマンドを変更するにはどうすればよいですか?

a/b/c.log: Exception happened 1
d/e/f.log: Exception happened 2

このソリューションでは、すべてのLinuxコマンドを使用できます。

答え1

お持ちの場合multitailインストールしたら、それを使用して-E 特定の正規表現に一致する行のみを選択し、その行の--label前にファイル名を付けることができます。たとえば(-N 0必要に応じて調整):

multitail --follow-all -N 0 --mergeall -E 'Exception' \
--label 'a/b/c.log: ' a/b/c.log --label  'd/e/f.log: ' d/e/f.log

アクセスできない場合は、multitail各ファイルで作業し、次のtail -fツールを使用して出力を後処理できますgrepsedawk

tail -f a/b/c.log | sed '/Exception/!d;s|^|/a/b/c.log: |' &
tail -f d/e/f.log | sed '/Exception/!d;s|^|/d/e/f.log: |'

または

tail -f a/b/c.log | awk '/Exception/{print "a/b/c.log: " $0}' &
tail -f d/e/f.log | awk '/Exception/{print "d/e/f.log: " $0}'

関連情報