perl 文件::尾部同步



im 遇到这种情况:我正在使用perl守护程序解析一些日志文件。此守护程序将数据写入 mysql db。

日志文件可以:

  1. 旋转("通过文件大小和一些逻辑解决")
  2. 不存在(尾巴中的"ignore_nonexistant"参数)

守护 进程:

  1. 可以杀死
  2. 可以死了某个雷亚松。

我正在使用文件::尾巴到尾部文件。对于创建日期或文件大小的文件轮换机制可以提供帮助。我应该使用什么机制从文件中的某个位置启动尾巴?(因为有很多这样的守护进程,没有对文件系统的写入访问权限)。

我已经考虑过数据库中的位置变量,但这对我没有帮助。

也许是将位置参数传递给parrent过程的某种机制?

我只是不想重新发明自行车。

File::Tail 已经检测到旋转并继续从新文件中读取。

为了处理守护程序死亡和重新启动,是否可以在数据库中查询守护程序重新启动时写入的最后一条记录,并跳过日志文件行,直到到达后面的行?

尝试 http://search.cpan.org/dist/Log-Unrotate/。如果您希望将位置文件存储在 DB 而不是本地文件系统中,则必须实现自己的 Log::Unrotate::Cursor 类,但这应该是微不足道的。

我们在生产中编写和使用Log::Unrotate 5 年,它非常努力地从不跳过任何数据。(它非常努力,以至于如果您的光标无效,例如,如果日志被旋转了几次,而读取器由于某种原因无法工作。您可能希望启用autofix_cursor选项来更改此行为)。

也看看 http://search.cpan.org/dist/File-LogReader/。我从未使用过它,但它应该解决相同的任务。

最新更新