我想收集所有日志条目,这些条目写入带有轮换的日志文件:
log_2013_05_10.txt
log_2013_05_11.txt
log_2013_05_12.txt
...
...到一个文件中。目标是,在压力测试应用程序(一夜之间运行)期间,所有条目都可以在一个文件中使用(并且仅在此时间段内),因此不需要手动合并和清理(从testperiod之前和之后删除条目)。
是否有任何工具(linux命令行)跟踪文件(匹配某些模式)? 类似的东西:
streamer 'log_2013*' > joined.txt
(只要joiner命令运行,就会附加joined.txt - 例如24h)
答案 0 :(得分: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
查看正在写入已加入日志的内容。
答案 1 :(得分:2)
我认为,multitail可能适合您。
MultiTail允许您查看一个或多个文件,如原始尾部 程序。不同之处在于它会为您创建多个窗口 控制台(使用ncurses)。 它还可以监控通配符:如果是另一个文件 匹配通配符有一个更新的修改日期,它会 自动切换到该文件。这样你可以,例如, 监视完整的文件目录。合并2甚至更多 可以使用日志文件。
答案 2 :(得分: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