gpt4 book ai didi

linux - 如何在 perl 中流式传输不断更改文件名的日志文件内容?

转载 作者:太空狗 更新时间:2023-10-29 12:09:12 25 4
gpt4 key购买 nike

我在 Linux 系统上有一系列应用程序,我需要基本上不断地“流”出或什至只是“尾”出,但挑战在于文件名不断滚动和变化。

所有日期都是编码的(日期采用不同的格式),然后每个都有不同的递增格式。

它们中的大多数从一个开始并增加,但一个没有扩展名,然后在第一个文件之后添加一个扩展名,另一个增加一个数字,但是一旦达到 99 卷就会增加一个 alpha 并将数字返回到 01然后再次上升,因为它滚动得如此之快。

我只有操作系统级别的 shell 脚本、操作系统命令行实用程序和 perl 可供我处理这种情况,以便另一个应用程序获取和读取这些日志。

新文件总是在它开始写入新文件时创建,并且不同日志组(有些我正在阅读,有些我没有)被写入同一目录,所以我不能只拾取目录中的任何内容。

如果我只是'tail -n 1000000 -f |'他们今天这适用于我正在使用的阅读器应用程序,直到文件发生变化,我无法在阅读器应用程序中设置文件列表范围,但可以对其进行预处理,因此它们基本上以连续流的形式出现在读者面前,而不是直接出现在读者面前调用命令来读取它们。 simple Perl log reader like this也适用于静态文件名但不适用于动态文件名。重要的是我不重新处理任何日志行,而只是捕获写入日志的新行。

我承认我不是任何形式的 Perl 大师,到目前为止我能找到的最佳答案/线索是使用 Perl's Glob function to possibly这样做但是我发现的例子基本上在每次运行时重新处理所有文件然后似乎停止了。

我正在尝试处理的跨多个应用程序的示例文件名..

  • appA_YYMMDD.log
  • appA_YYMMDD_0001.log
  • appA_YYMMDD_0002.log
  • WS01APPB_YYMMDD.log
  • WS02APPB_YYMMDD.log
  • WS03AppB_YYMMDD.log
  • APPCMMDD_A01.log
  • APPCMMDD_B01.log
  • YYYYMMDD_001_APPD.log

如上所示,文件没有相同的 inode ,并且不可能简单地监视目录的变化,因为很多东西都写在那里。在开发系统上,它有超过 50 个日志被写入目录和数千个文件,我只试图检索 5 个。我正在查看是否可以使用 multitail 来尝试该建议,但它目前不可用并安装任何环境中额外的 RPM 通常是一场长达数月的战斗。

ls -i24792 APPA_180901.log24805 APPA__180902.log17011 APPA__180903.log17072 APPA__180904.log24644 APPA__180905.log17081 APPA__180906.log17115 APPA__180907.log

所以我真正想要做的事情的根源只是一个连续的流,不管文件名是否改变,并且不必重复运行提取命令,也不必在数据馈送中有大的中断,而一些脚本会发现文件被登录到已更改。我不需要解析内容(我的其他应用程序会这样做)。有没有一种简单的方法来处理这个不断变化的文件名?

最佳答案

如何使用 Linux inotify 监控日志目录的变化,例如Linux::inotify2?然后您可以检测何时创建新日志文件,停止从旧日志文件读取并开始从新日志文件读取。

关于linux - 如何在 perl 中流式传输不断更改文件名的日志文件内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53512417/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com