各位,是否有一个*nix解决方案可以使日志文件充当循环缓冲区?例如,我希望日志文件存储最多1Gb的数据,并在达到限制后丢弃旧的条目。
有可能吗?我相信为了实现日志文件应该被转换成某种特殊的设备.
我知道错误日志旋转工具,但这不是我所需要的。日志旋转需要大量的IO,通常每天发生一次,而我需要一个“运行时”解决方案。
发布于 2010-04-17 10:49:05
Linux有一个内核环缓冲区。您可以使用dmesg来实现展示它。
或者这里是一个Linux内核模块,它看起来可以做您想做的事情。
什么是emlog?emlog是一个Linux内核模块,它可以方便地访问进程的最新(也只是最近的)输出。它的工作方式就像日志文件上的"tail -f“,只不过所需的存储永远不会增加。这在没有足够的内存或磁盘空间来保存完整的日志文件的嵌入式系统中很有用,但有时需要最新的调试消息(例如,在观察到错误后)。emlog内核模块实现了简单的字符设备驱动。驱动程序的作用就像一个具有有限循环缓冲区的命名管道。缓冲区的大小是很容易配置的。当更多的数据被写入缓冲区时,最老的数据将被丢弃。从emlog设备读取的进程将首先读取现有的缓冲区,然后看到写入的新文本,类似于使用"tail -f“监视日志文件。(如果进程需要获取日志的当前内容而不阻塞等待新数据,也支持非阻塞读取。)
发布于 2010-04-17 11:38:17
您可以使用djb的Daemontools中的多测井。你把你的日志输出输进它。是的,这是日志旋转,但旋转只是:
ln current $tai64nlocaltimestamp这在任何现代linux文件系统上都是一个超级快速的操作。您可以指定需要多少日志文件,需要它们有多大。创建10x1024MB文件,您将拥有1gb的环形缓冲区。
注意,由于自动旋转,它是每个多日志实例的一个源。但是,您可以通过使用netcat或手工编写一个简单的包装器来解决这个问题。
发布于 2010-04-17 07:31:59
您可以创建一个FIFO管道,然后使用插入数据库的脚本读取它。当计数器达到1,000时,重新启动插入到数据库中的id号。当然不适合大小,但你用它作为例子,所以我假设这是一个理论问题。
https://serverfault.com/questions/133320
复制相似问题