2

我想收集所有日志条目,这些条目通过轮换写入日志文件:

    log_2013_05_10.txt
    log_2013_05_11.txt
    log_2013_05_12.txt
    ...

...到一个文件中。目标是,在对一个通宵运行的应用程序进行压力测试期间,所有条目都在一个文件中可用(并且仅从这个时间段开始),因此不需要手动合并和清理(从测试期之前和之后删除条目)。

是否有任何工具(linux命令行)可以跟踪文件(匹配某种模式)?就像是:

    streamer 'log_2013*' > joined.txt

(只要 joiner 命令运行,joined.txt 就会被附加 - 例如 24 小时)

4

3 回答 3

3

tail -Fq -n 0 log_2013_05_10.txt log_2013_05_11.txt ... > joined.txt应该管用。它将跟随文件的结尾,在目标文件到达时将其新内容写入目标文件。如果你使用 Bash 4,你可以创建一个简单的表达式来匹配一整年的所有文件(然后是一些):log_2013_{01..12}_{01..31}.txt

例子:

$ cd -- "$(mktemp --directory)"
$ tail -Fq -n 0 date.log disk.log > joined.txt & # Start logging
[1] 30827
tail: cannot open 'date.log' for reading: No such file or directory
tail: cannot open 'disk.log' for reading: No such file or directory
$ while true; do date >> date.log; sleep 5; done & # Log time every 5 seconds
[2] 30835
tail: 'date.log' has become accessible
$ while true; do df -Ph / | tail -n 1 >> disk.log; sleep 10; done & # Log disk use every 10 seconds
[3] 30847
tail: 'disk.log' has become accessible

现在您可以tail -f -n 0 joined.txt查看正在写入连接日志的内容。

于 2013-05-22T14:40:37.093 回答
2

我认为,multitail可能对你有用。

MultiTail 让您可以像原始 tail 程序一样查看一个或多个文件。不同之处在于它在您的控制台上创建了多个窗口(使用 ncurses)。它还可以监控通配符:如果另一个匹配通配符的文件有更新的修改日期,它会自动切换到那个文件。例如,您可以通过这种方式监视完整的文件目录。可以合并 2 个甚至更多的日志文件。

于 2013-05-22T14:27:29.977 回答
0

这很简单,但应该可以解决问题。

#!/bin/bash

OUTFILE=/tmp/joinedlog.txt
touch $OUTFILE

if [ "$1" == "" ]; then
    PATTERN='log_*05*'
else
    PATTERN=$1
fi

echo "Searching for $PATTERN"

for x in $( ls $PATTERN ); do
    echo Joining $x
    cat $x >> $OUTFILE
done
于 2013-05-22T14:03:32.237 回答