1

我正在尝试使用 tail -f 监视日志文件,解析它以使用 grep 提取一些数据并将数据作为 mysql 查询传递。我可以通过将tailf检测到的每个新行传递给php脚本来做到这一点,但我不知道该怎么做。或者我可以直接用php模拟tailf,但是如何用php监视文件的变化?我想只要有一段时间,寻找大小,记住最后一个位置,寻找它并阅读直到差异对吗?任何人都可以就什么更好用提供一些提示?还是更简单?另外我听说命名管道可能是一个解决方案,但不知道如何从那里获取数据顺便说一句,记录器是 nginx .. 谢谢

4

2 回答 2

3

在 shell 中,您可以执行以下操作:

tail -f file.log|grep whatever-you-want|while read line; do 
  echo $line
done

只需将行更改为echo $line您想要的 - 您可以在该行中调用 PHP 或您想要的任何内容,即$line来自 tail/grep 组合的行。

查看这些 SOq 了解更多信息:

于 2010-12-01T00:13:29.013 回答
0

您正在混合使用不同的方法。tail -f 意味着您将一直运行一个进程,如果日志文件被截断(旋转),您很可能会卡住。如果您需要日志监控的好东西(我假设是 linux),那么您必须监控文件的更改并寻找记住的位置。恕我直言,最好的方法是依靠现有的解决方案。syslog-ng 似乎首先浮现在脑海中。它可以将您的日志文件通过管道传输到您的程序中。尽管非系统日志记录并非如此。我会选择http://www.php.net/manual/en/intro.inotify.php。这将需要一个正在运行的进程。作为最终(顺序取决于您的情况)解决方案,我会定期检查 cron。

于 2010-12-01T00:28:18.487 回答