如何记录连续流的最后 X 行

如何记录连续流的最后 X 行

我有一些代码应该或多或少无限期地运行,但是在它崩溃的情况下我想看到它的输出。我可以在 Linux 中使用任何命令或命令组合来仅存储命令标准输出的最后 X 行,这样如果我的代码已经运行了几天,我最终不会得到 100,000 行的文本文件,但是只说最后一句,已经输出100行了?
更重要的是,是否可以让这个文本文件始终只包含最后 100 行左右,这样如果我在代码运行时随时查看它,我就可以看到我的代码在做什么?

答案1

您正在寻找“环形缓冲区”。 Serverfault 姐妹站点链接到 linux 接受的答案:

将日志文件转变为一种循环缓冲区

答案2

100000 行(每行 100 个字符)仍然只有大约 10 MB,因此甚至不可能保存所有内容并搜索您想要的内容,或者只是阅读tail.

但是,如果您不想全部保存,您还有一些选择。对于日志文件,通常会轮换日志,即在文件足够大之后,将其重命名并通知程序重新打开其输出,然后将其转到具有相同名称的新文件。如果程序本身不知道如何执行此操作,则可能需要修改程序。 (仅重命名文件没有帮助,因为打开的文件句柄仍指向重命名的文件。)

上述问题的解决方法:将输出通过管道传输到logger,将其发送到 syslog,然后对输出进行日志轮换,因为 syslog 肯定会支持它。缺点:有点混乱,因为它会污染不相关的日志文件,除非您小心地将特定的日志数据配置到单独的文件中。还增加了一点开销。

三:运行程序screen并将回滚窗口的大小设置为您喜欢的任何大小。 (screen -h <N>启动它时,或使用:scrollback <N>内部屏幕来更改大小。开始时在屏幕中滚动回滚可能有点不直观,但您可以使用:hardcopy -h <filename>.

答案3

最简单的方法是将程序记录到单个文件中,然后tail只要您想查看最近发生的情况,就可以在该文件上使用命令。

答案4

还有https://github.com/nicupavel/emlog- 但设置起来有点复杂。

相关内容