我想监视 2 个不同的日志文件(当事件出现在日志中时)。
tail -f /var/log/file1 -f /var/log/file2
对于每个文件,我想 grep 一些模式:
tail -f /var/log/file1 | grep '\(pattern1\|pattern2\)'
tail -f /var/log/file2 | grep '\(pattern3\|pattern4\|pattern5\)'
我不知道如何让这一切一起工作。此外,我想以红色打印 file1 日志输出,以蓝色打印 file2 日志输出:
同样,我可以对一个文件执行此操作(我在这个论坛中抓取的片段):
RED='\033[0;31m'
BLUE='\033[0;34m'
tail -fn0 /var/log/file1 | while read line;
do
if echo $line | grep -q '\(pattern1\|pattern2\)';then
echo -e "{$RED}$line"
fi
done
但我绝对不知道如何对多个文件执行此操作。有任何想法吗?
答案1
如果要同时解析多个日志,可以使用以下语法:
tail -f /var/log/{log1,log2}
这将产生所有必需日志的所需输出,因此您可以使用参数-e
ingrep
来创建多个模式。所以大家在一起:
tail -f /var/log/{log1,log2} | grep -ie "pattern1" -ie "pattern2" -ie "pattern3"
关于 grep 的着色,请看一下这很好的答案。
答案2
tail -n 0 -f file1 file2 |
awk -v file1pattern="pattern1|pattern2" -v file2pattern="pattern3|pattern4" \
'/^==> file1 <==$/ { print "\033[0;31m"; pattern=file1pattern };
/^==> file2 <==$/ { print "\033[0;34m"; pattern=file2pattern }; $0 ~ pattern'
答案3
这是解决方案(谢谢基特先生和鸭子)。