是否可以将多个流的内容输出到终端中的单独列中?



对于工作,我偶尔需要监视我创建的服务的输出日志。这些日志的生存期很短,包含许多我不一定需要的信息。 到目前为止,我一直在使用:

grep <tag> * | less

其中<tag>为"信息"、"调试"、"警告"或"错误"。警告的数量大约是错误的 10 倍,调试数量是警告的 10 倍,依此类推。这使得很难在相关的调试消息的海洋中捕获一个错误。例如,我想要一种方法,使所有"WARN"消息都显示在终端的左侧,所有"错误"消息都显示在右侧。

我尝试过使用 tmux 和屏幕,但它似乎在我的开发机器上不起作用。

尝试这样做:

FILE=filename.log
vim -O <(grep 'ERR' "$FILE") <(grep 'WARN' "$FILE")

只需使用 sed 缩进所需的行。 或者,使用颜色。 例如,要将 ERRORS 设为红色,您可以执行以下操作:

$ r=$( printf '33[1;31m' )  # escape sequence may change depending on the display
$ g=$( printf '33[1;32m' )
$ echo $g  # Set the output color to the default
$ sed "/ERROR/ { s/^/$r/; s/$/$g/; }" *

如果这些是实时日志,如何在单独的终端中运行这两个命令:

错误:

tail -f * | grep ERROR

警告:

tail -f * | grep WARN

编辑

要自动执行此操作,您可以在 tmux 会话中启动它。我倾向于使用类似于我在这里描述的 tmux 脚本来执行此操作。

在您的情况下,脚本文件可能包含如下内容:

monitor.tmux

send-keys "tail -f * | grep ERRORn"
split
send-keys "tail -f * | grep WARNn"

然后像这样运行:

tmux new -d ; source-file monitor.tmux; tmux attach

您可以使用屏幕执行此操作。只需垂直拆分屏幕并在每个窗格上运行tail -f LOGFILE | grep KEYWORD

作为快捷方式,您可以使用以下 rc 文件:

split -v
screen bash -c "tail -f /var/log/syslog | grep ERR"
focus
screen bash -c "tail -f /var/log/syslog | grep WARN"

然后使用以下方法启动您的screen实例:

screen -c monitor_log_screen.rc

当然,您可以通过进行更多拆分并使用tail -fwatch等命令来进一步扩展此概念来获取不同输出的实时更新。

还可以探索屏幕其他屏幕功能,例如使用多个窗口(带监控)和硬状态,您可以想出一个相当全面的"监控控制台"。

相关内容

  • 没有找到相关文章