perl File::Tail 同步

发布于 2024-11-08 12:50:08 字数 417 浏览 3 评论 0原文

我有这种情况: 我正在使用 perl 守护进程解析一些日志文件。该守护进程将数据写入 mysql 数据库。

日志文件可以:

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

守护进程:

  1. 可以被杀死
  2. 可以因某种原因而死亡。

我使用 File::Tail 来跟踪该文件。对于创建日期或文件大小的文件轮换机制可以提供帮助。我应该使用什么机制从文件中的某个位置开始尾部? (假设有很多这样的守护进程,没有对文件系统的写访问权限)。

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

也许有某种机制可以将位置参数传递给父进程?

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

im having this situation:
Im parsing some log files with perl daemon. This daemon writes data to mysql db.

Log file can:

  1. be rotated ('solved by filesize and some logic')
  2. doesnt exist ('ignore_nonexistant' parameter in Tail)

Daemon:

  1. Can be killed
  2. Can became dead by some reazon.

Im using File::Tail to tail tha file. For file rotation mechanism of date of creation or filesize can help. and what mechanism should i use to start tail from some position in file? (asume that there is a lot of such daemons, no write access to filesystem).

I've think about position variable in DB, but this wont help me.

Maybe some mechanism to pass position parameter to parrent process?

I just dont want to reinvent bicycle.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

月棠 2024-11-15 12:50:08

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

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

File::Tail already detects rotation and continues reading from the new file.

To deal with the daemon dying and restarting, can you query the database for the last record written when the daemon restarts, and just skip logfile lines until you get to a later line?

执手闯天涯 2024-11-15 12:50:08

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

我们在生产中编写并使用了 Log::Unrotate 5 年,它非常努力地不跳过任何数据。 (它会尽力尝试,如果您的光标无效,它会抛出异常,例如,如果日志旋转了几次,而阅读器由于某种原因无法工作。您可能需要启用 autofix_cursor 选项来更改此设置行为)。

另请查看 http://search.cpan.org/dist/File-LogReader/< /a>.我从未使用过它,但它应该可以解决相同的任务。

Try http://search.cpan.org/dist/Log-Unrotate/.
You'll have to implement your own Log::Unrotate::Cursor class if you wish to store position files in DB instead of local filesystem, but that should be trivial.

We wrote and used Log::Unrotate for 5 years in production and it tries really hard to never skip any data. (It tries so hard that it throws exception if your cursor becomes invalid, for example if log got rotated several times while reader didn't work for some reason. You may want to enable autofix_cursor option to change this behavior).

Also take a look at http://search.cpan.org/dist/File-LogReader/. I never used it but it's supposed to solve the same task.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文