Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在不禁用默认异常处理程序的情况下向Laravel添加新的异常处理程序?_Php_Laravel_Laravel 5_Sentry - Fatal编程技术网

Php 如何在不禁用默认异常处理程序的情况下向Laravel添加新的异常处理程序?

Php 如何在不禁用默认异常处理程序的情况下向Laravel添加新的异常处理程序?,php,laravel,laravel-5,sentry,Php,Laravel,Laravel 5,Sentry,我使用它来跟踪来自Laravel应用程序的异常 Sentry的文档说我应该在应用程序引导中使用以下代码来设置客户端: $app->configureMonologUsing(function($monolog) { $client = new Raven_Client('your dsn'); $handler = new Monolog\Handler\RavenHandler($client); $handler->setFormatter(new Mon

我使用它来跟踪来自Laravel应用程序的异常

Sentry的文档说我应该在应用程序引导中使用以下代码来设置客户端:

$app->configureMonologUsing(function($monolog) {
    $client = new Raven_Client('your dsn');
    $handler = new Monolog\Handler\RavenHandler($client);
    $handler->setFormatter(new Monolog\Formatter\LineFormatter("%message% %context% %extra%\n"));
    $monolog->pushHandler($handler);
});
这很好

副作用是,Laravel的默认异常处理程序在添加新异常处理程序后停止工作,该处理程序将异常写入位于
/storage/logs/Laravel.log
的文件中

我怎样才能同时保留这两个处理程序

更新Laravel 5.6+


从Laravel 5.6开始,可以使用日志堆栈。它现在允许开发者轻松地设置多个日志通道。有关这方面的更多信息,请参阅。

您可以查看
illumb\Foundation\Bootstrap\ConfigureLogging
了解Laravel如何设置其本机日志记录。然后在您自己的引导中,只需推送另一个执行相同操作的处理程序:

$app->configureMonologUsing(function($monolog) {

    // Keep your existing Sentry configuration
    $client = new Raven_Client('your dsn');
    $handler = new Monolog\Handler\RavenHandler($client);
    $handler->setFormatter(new Monolog\Formatter\LineFormatter("%message% %context% %extra%\n"));
    $monolog->pushHandler($handler);

    // Add another handler that writes to laravel.log
    $handler = new Monolog\Handler\StreamHandler(storage_path('logs/laravel.log'));
    $handler->setFormatter(new Monolog\Formatter\LineFormatter(null, null, true, true));
    $monolog->pushHandler($handler);

});
编辑:

如果不需要精确地再现Laravel的行为,可以使用默认的格式化程序进行一行程序添加:

$monolog->pushHandler(new Monolog\Handler\StreamHandler(storage_path('logs/laravel.log')));
这与本机Laravel实现的不同之处在于,它将使用for
LineFormatter
,而不是我们之前明确设置的

第三个重用Laravel的逻辑来配置Monolog的选项是增加这一行:

with(new Illuminate\Log\Writer($monolog))->useFiles(storage_path('logs/laravel.log'));

我在这里查看,但在那里没有看到
StreamHandler
实例。
StreamHandler
是从Monolog包导入的,源代码位于:。。。但是,您不需要深入到
illighted\Log\Writer
之外的任何深度来重现Laravel行为。答案中的代码应该可以用。我希望有更简洁的东西。也许框架应该有一种方法来保留默认的记录器。但不是你的错,你的代码起作用了。非常感谢。没问题,我添加了两种替代方法来实现相同的结果,如果有帮助的话,它们更简洁。就我个人而言,我会坚持原来的答案——虽然更详细,但它避免了混淆抽象层次。但没什么大不了的,只要最适合你的需要!