3

为了工作,我偶尔需要监控我创建的服务的输出日志。这些日志是短暂的,并且包含很多我不一定需要的信息。到目前为止,我一直在使用以下方法观察它们:

grep <tag> * | less

其中<tag>是 INFO、DEBUG、WARN 或 ERROR。警告的数量大约是错误的 10 倍,调试的数量是警告的 10 倍,依此类推。在大量相关的 DEBUG 消息中很难发现一个错误。例如,我想要一种方法,让所有“警告”消息出现在终端的左侧,所有“错误”消息出现在右侧。

我曾尝试使用 tmux 和 screen,但它似乎不适用于我的开发机器。

4

4 回答 4

5

尝试这样做:

FILE=filename.log
vim -O <(grep 'ERR' "$FILE") <(grep 'WARN' "$FILE")
于 2012-10-18T15:37:55.710 回答
2

如果这些是实时日志,那么如何在不同的终端中运行这两个命令:

错误:

tail -f * | grep ERROR

警告:

tail -f * | grep WARN

编辑

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

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

监视器.tmux

send-keys "tail -f * | grep ERROR\n"
split
send-keys "tail -f * | grep WARN\n"

然后像这样运行:

tmux new -d \; source-file monitor.tmux; tmux attach
于 2012-10-18T15:40:22.130 回答
2

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

$ r=$( printf '\033[1;31m' )  # escape sequence may change depending on the display
$ g=$( printf '\033[1;32m' )
$ echo $g  # Set the output color to the default
$ sed "/ERROR/ { s/^/$r/; s/$/$g/; }" *
于 2012-10-18T16:54:37.147 回答
0

您可以使用screen来做到这一点。只需垂直拆分屏幕并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获取不同输出的实时更新。

还可以探索 screen 的其他屏幕功能,例如使用多个窗口(带监控)和hardstatus,您可以想出一个非常全面的“监控控制台”。

于 2012-10-18T15:53:53.610 回答