2011-05-05 156 views
0

假设我有一个控制台程序输出stdout上的跟踪调试行,我想在服务器上运行。如何创建“pop_front”的日志文件?

然后我做的:

./serverapp > someoutputfile 

如果我需要怎么看节目的时候,我只想登录到服务器并做:

tail -f someoutputfile 

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

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

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

回答

1

您可以截断日志文件。执行此操作的一种方法是在shell命令行中输入:

>someoutputfile 

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

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

在大多数Linux文件系统中,这些孔会产生稀疏文件,这些文件实际上并未使用孔中的空间。因此,该文件可能在开始时包含许多千兆字节的0,但只能在磁盘上使用500 KB。

快速日志记录的另一种方法是将内存映射到固定大小的磁盘上:例如16 MB。然后,日志记录写入一个内存指针,当它达到大小限制时,该内存指针将进行环绕。然后它继续写在文件的前面。有一种写位置标记是一个好主意。例如,我使用<====>。我发现这种方法对于调试日志来说非常快速而且非常棒。

0

我还没有使用它,但它在这里得到很好的评价上,请尝试logrotate

管理输出文件可以告诉你,一个自定义脚本/解决方案是不是出了问题的更广泛的讨论; - ):Problem with Bash output redirection

我希望这有助于。