gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-10-31 23:28:46 24 4
gpt4 key购买 nike

我正在使用 Sentry跟踪来自 Laravel 应用程序的异常。

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

$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 开始,日志堆栈可用。它现在允许开发人员轻松设置多个日志 channel 。引用the docs了解更多信息。

最佳答案

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

$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 实现的不同之处在于它将使用 default constructor arguments对于 LineFormatter 而不是我们之前明确设置的那些。

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

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

关于php - 如何在不禁用默认异常处理程序的情况下向 Laravel 添加新的异常处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36290560/

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