首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux:将循环日志文件流式传输到一个文件中

问Linux:将循环日志文件流式传输到一个文件中
EN

Stack Overflow用户
提问于 2013-05-22 21:56:12
回答 3查看 703关注 0票数 2

我想收集所有日志条目,这些条目以循环方式写入日志文件:

代码语言:javascript
复制
    log_2013_05_10.txt
    log_2013_05_11.txt
    log_2013_05_12.txt
    ...

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

有没有什么工具(linux命令行)可以跟踪文件(匹配某种模式)?类似于:

代码语言:javascript
复制
    streamer 'log_2013*' > joined.txt

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

EN

回答 3

Stack Overflow用户

发布于 2013-05-22 22:40:37

tail -Fq -n 0 log_2013_05_10.txt log_2013_05_11.txt ... > joined.txt应该可以工作。它将跟随文件的末尾,在目标文件到达时将其新内容写入目标文件。如果您使用的是Bash4,则可以创建一个简单的表达式,该表达式将匹配一整年(甚至更长时间)的所有文件:log_2013_{01..12}_{01..31}.txt

示例:

代码语言:javascript
复制
$ 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查看正在向连接日志写入的内容。

票数 3
EN

Stack Overflow用户

发布于 2013-05-22 22:27:30

我想,multitail可能会为你工作。

MultiTail允许您像原始tail程序一样查看一个或多个文件。不同之处在于它会在你的控制台上创建多个窗口(带有ncurses)。它还可以监控通配符:如果另一个与通配符匹配的文件有更新的修改日期,它将自动切换到该文件。这样,您就可以监控一个完整的文件目录。可以合并2个甚至更多的日志文件。

票数 2
EN

Stack Overflow用户

发布于 2013-05-22 22:03:32

这很简单,但应该能起到作用。

代码语言:javascript
复制
#!/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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16693713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档