我有一个 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-a
thenS
(注意:大写 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