如何监控 Laravel 中的文件系统访问?

How do I monitor file system access in Laravel?

我正在尝试寻找一种方法来监控有关我的应用程序文件系统上文件访问的基本信息。这些文件使用 public 驱动程序存储,并且 public 仅通过适当的符号链接可用。我想在访问文件时向数据库添加一条记录。有没有办法在不创建单独的控制器的情况下完成此操作?也许是文件系统中间件类型的机制?

首先,静态文件不由您的 PHP 应用程序处理(在本例中 Laravel),它们由您的 Web 服务器(Nginx、Apache 等)处理。
如果是 PHP 请求,通常的配置只会将请求路由到 PHP,如果是静态文件,则只会提供文件。

您可以告诉网络服务器通过您的应用程序的特定 URL 路由所有静态文件,然后在您的控制器中提供该文件并保存统计信息,但我建议您不要这样做,因为静态文件Web 服务器提供的服务非常高效,如果您通过 PHP 应用程序处理它们,您会增加很多影响性能的工作。

一个解决方案

您可以创建一个 Laravel 控制台命令,它会调用日志文件的每一行,并可能使用 SupervisorD 来确保始终调用该命令。

所以,你可以用这样的东西来调用你的命令:

tail -F -n 1 /path/to/access.log | /usr/bin/php /path/to/application/artisan register:log

其中 -F 将处理日志轮换,-n 1 将使用最后一行(或者您可以尝试使用 -n 0)以确保您不考虑旧的行如果由于某种原因进程被重新启动并且 register:log 可以是 Laravel 中控制台命令的签名。

这样,访问日志中的每一行都会调用您的命令,并将日志行作为输入。