记录 Laravel 5.1 中的所有事件而不会遇到"nesting"异常



如何在Laravel 5.1中记录所有事件?我试过了,但得到了这个错误:

达到最大功能嵌套级别"100"

我曾尝试将xdebug嵌套级别设置为更高的值(900),但没有成功。

将以下内容放入EventServiceProvider的boot函数中。关键是过滤掉"lighte.log"事件。如果不过滤掉这些,日志记录语句将导致对事件处理程序进行递归求值。

请注意,Laravel框架似乎为了自己的目的大量使用了事件,因此您也会在日志中看到许多"内部"框架事件。

public function boot(DispatcherContract $events)
{
    parent::boot($events);
    Event::listen('*', function()
    {
        $event = Event::firing();
        if(!starts_with($event, "illuminate.log")) {
            Log::info("Event fired: " . $event . "n");
        }
    });
}

受Bryan答案的启发,这里有一个适用于Laravel 10.16.x:的片段

Event::listen('*', static function (string $event): void {
    if (Str::startsWith($event, MessageLogged::class)) {
        return;
    }
    logger(sprintf('Event fired: %s', $event));
});

将其粘贴到您的应用程序或任何其他服务提供商的boot方法中。

相关内容

最新更新