跟踪两个日志文件

跟踪两个日志文件

我有一个 Web 应用程序,它会将性能信息输出到多个日志文件。一个日志文件输出代码执行时间,另一个日志文件输出 SQL 时间。我无法控制记录器或生成日志文件的代码,但我想将日志输出到一个地方。

目前我正在做这样的事情

tail -f sqlLogs.log | grep sql-time
tail -f perflogs.log | grep exec-time

每次在应用程序中执行 SQL 时,这都会向控制台输出一些内容。但我必须在两个单独的 SSH 会话中运行代码。然而,我希望能够在同一个 SSH 会话中跟踪这两个文件。这可能吗?

答案1

是的,尾巴输出附加到命令行中给出的所有文件的行:

tail -F sqlLogs.log perflogs.log | egrep '(sql-time|exec-time)'

答案2

看一下多尾。它是你的朋友。

你可以有多个日志尾

- 不同的窗口,a al vim 的‘分割’
 - 或者将两个(或 N 个)流合并到一个视图中,然后
 - 你可以通过正则表达式过滤蒸汽,如果你愿意的话,
 - 它将把输出“tee”到一个文件

http://www.vanheusden.com/multitail/

在 Ubuntu 10.04 上:sudo apt-get install multitail

答案3

是的,使用该screen命令,您可以在一个终端上运行 2 个 bash 会话。

  • 开始跑步screen吧,
  • 然后输入Ctrl-athen S(注意:大写 S)将屏幕分成两部分。
  • Ctrl-a然后Tab会在两个会话之间移动您。
  • Ctrl-a然后c将在该新区域启动一个 shell。

(在使用之前请先看看 Riccardo 的回答,他的回答要简单得多,我会保留这个,因为它可能对有类似但不同问题的人有用)。

答案4

您可以使用先入先出将输出多路复用到一个管道

创建一个 fifo 管道,将 n 个文件拖入管道,然后 cat 该管道

 mkfifo pipeName
 tail file1 &
 tail file2 &
 ...
 tail fileN &
 cat pipeName

等结束了

 rm pipeName

相关内容