旋转缓冲区类型文件记录实用程序

旋转缓冲区类型文件记录实用程序

我正在尝试调试一个在 stdout/stderr 上抛出大量日志的服务器。我只需将最后 N 行重定向到文件。类似于tcpdump's -C& -Wflags 中的旋转缓冲区功能。如果我可以在服务器仍在运行时查看日志并抛出日志(我可以cp在另一个文件中查看它),那就太好了。有一个实用程序可以做到这一点吗?从我对工具的一点了解来看logrotate,它应该反复运行。我认为这不符合我的需要。我想要的是:

serverd -d | $TOOL -n 100 srv.log

...其中任何时间都srv.log包含从 输出的最后 100 行serverd

答案1

您可以使用 只获取任何文件或输入流的最后 N 行tail

command | tail -n 100 > file

然而,听起来您希望最后 100 行的旋转流始终位于日志文件中。这并不容易做到。您可以通过删除行来定期截断日志文件,也可以使用像 logrotate 这样的系统来剔除旧数据,但是没有一种简单的方法来保留 100 行 FIFO 类型的日志文件。

答案2

我确信原来的海报现在已经找到了解决方案。这是其他可能阅读此主题的人的另一篇文章......

Curtail 限制程序输出的大小并使用以下命令保留最后 200MB 的输出:

$ run_program | curtail -s 200M myprogram.log

参考

笔记:我是这个答案中链接的软件的维护者......

答案3

Apache 有一个程序叫做rotatelogs,

无论您希望日志增长到什么大小,请选择一半大小并将日志文件数设置为 2,例如

<yourlogGenerator>|rotatelogs -n 2 logfile 5M

将创建两个 5M 日志文件并在它们之间翻转。

这是旋转日志的完整描述

你可以添加-L linkname然后你可以tail -f linkname

相关内容