【问题标题】:How to create a log file that "pop_front"s?如何创建“pop_front”的日志文件?
【发布时间】:2011-05-05 02:53:44
【问题描述】:

假设我有一个控制台程序,它在标准输出上输出跟踪调试行,我想在服务器上运行。

然后我做:

./serverapp > someoutputfile

如果我需要查看程序的运行情况,我只需登录服务器并执行以下操作:

tail -f someoutputfile

但是,可以理解的是,随着时间的推移,someoutputfile 会变得相当大。

有没有办法让someoutputfile 被限制在一定的大小,并且只有最近的部分?

我的意思是,最困难的方法是制作一个自定义脚本/程序,在不同文件之间循环输出,但这似乎有点矫枉过正。

【问题讨论】:

    标签: linux shell logging


    【解决方案1】:

    您可以截断日志文件。一种方法是输入:

    >someoutputfile
    

    在 shell 命令行中。这是一个没有输出的重定向,它会清除文件的所有内容。

    这里的棘手之处在于,任何写入该文件的程序都将继续写入该文件的最后一个输出位置。所以文件会立即获得一个从 0 到 X 字节的“洞”,其中 X 是输出位置。

    在大多数 Linux 文件系统中,这些漏洞导致文件稀疏,实际上并没有使用漏洞中的空间。因此,该文件可能在开头包含许多千兆字节的 0,但在磁盘上只使用了 500 KB。

    另一种进行快速记录的方法是在固定大小的磁盘上内存映射一个文件:例如 16 MB。然后日志写入一个内存指针,当它达到大小限制时会回绕。然后它继续在文件的前面写入。拥有某种写入位置标记是个好主意。例如,我使用<====>。我发现这种方法速度快得离谱,非常适合调试日志记录。

    【讨论】:

      【解决方案2】:

      我没用过,但它在这里得到了很好的评价,试试logrotate

      关于管理输出文件的更一般的讨论可能会告诉您自定义脚本/解决方案并非不可能;-):Problem with Bash output redirection

      我希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2014-04-10
        • 2021-01-01
        • 2016-03-15
        • 1970-01-01
        • 1970-01-01
        • 2013-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多