我有几个日志文件(与我的网络服务器相关,又名各种 error_log、access_log 等),我想实时监控它们,即查看最近的更新,并且我需要使用不同的字符串或不进行任何过滤来单独过滤每个文件。
假设我有一组日志文件:file1.log
file2.log
file3.log
file4.log
file5.log
file1.log
file2.log
file3.log
我需要的前三个文件按某个字符串过滤string
代表路径或用户名的一部分。
file4.log
file5.log
我需要查看最后两个文件没有任何过滤,即按原样查看他们的更新。
我的知识是,我可以使用tail -f file1.log file2.log file3.log | grep string
它为我提供由分隔符分隔的所有三个文件的所需输出==> fileX <==
。我对最后两个文件使用的方法相同tail -f file4.log file5.log
。这给了我我需要的东西,但这些是单独的命令。
但我不知道如何将这两个命令组合在一起以在终端中获得一个实时输出。
我尝试执行用分号;
或&&
等分隔的两个命令,但这没有按预期工作。
我的问题是如何tail -f
使用 tail -f 文件分隔符的高级过滤将多个命令组合成单个输出==> fileX <==
?
备份问题是否还有其他方法可以处理日志文件更改的实时视图的类似结果?
答案1
我思考您正在寻找像以下这样简单的东西:
tail -f file1.log file2.log file3.log | grep string & tail -f file4.log file5.log
我通过启动此脚本对此进行了测试:
#!/bin/bash
while true; do echo file1 $(date); echo "unwanted"; sleep 3; done >> file1.log &
while true; do echo file2 $(date); echo "unwanted"; sleep 3; done >> file2.log &
while true; do echo file3 $(date); echo "unwanted"; sleep 3; done >> file3.log &
while true; do echo file4 $(date); echo "unwanted"; sleep 3; done >> file4.log &
while true; do echo file5 $(date); echo "unwanted"; sleep 3; done >> file5.log &
正如您所看到的,该脚本将打印出fileN
后跟 的输出date
,然后unwanted
每 3 秒在新行上打印该字符串到 5 个日志文件中的每一个中。然后我运行上面的命令并得到以下输出:
$ tail -f file1.log file2.log file3.log | grep 'file' & tail -f file4.log file5.log
[4] 861299
==> file4.log <==
file4 Sun Dec 17 01:34:31 PM EET 2023
unwanted
file4 Sun Dec 17 01:34:33 PM EET 2023
unwanted
file4 Sun Dec 17 01:34:34 PM EET 2023
unwanted
file4 Sun Dec 17 01:34:36 PM EET 2023
unwanted
file4 Sun Dec 17 01:34:37 PM EET 2023
unwanted
==> file5.log <==
file5 Sun Dec 17 01:34:31 PM EET 2023
unwanted
file5 Sun Dec 17 01:34:33 PM EET 2023
unwanted
file5 Sun Dec 17 01:34:34 PM EET 2023
unwanted
file5 Sun Dec 17 01:34:36 PM EET 2023
unwanted
file5 Sun Dec 17 01:34:37 PM EET 2023
unwanted
==> file1.log <==
file1 Sun Dec 17 01:34:31 PM EET 2023
file1 Sun Dec 17 01:34:33 PM EET 2023
file1 Sun Dec 17 01:34:34 PM EET 2023
file1 Sun Dec 17 01:34:36 PM EET 2023
file1 Sun Dec 17 01:34:37 PM EET 2023
==> file2.log <==
file2 Sun Dec 17 01:34:31 PM EET 2023
file2 Sun Dec 17 01:34:33 PM EET 2023
file2 Sun Dec 17 01:34:34 PM EET 2023
file2 Sun Dec 17 01:34:36 PM EET 2023
file2 Sun Dec 17 01:34:37 PM EET 2023
==> file3.log <==
file3 Sun Dec 17 01:34:31 PM EET 2023
file3 Sun Dec 17 01:34:33 PM EET 2023
file3 Sun Dec 17 01:34:34 PM EET 2023
file3 Sun Dec 17 01:34:36 PM EET 2023
file3 Sun Dec 17 01:34:37 PM EET 2023