使用 PHP 配置发送到 Sentry 的内容

Configure what is sent to Sentry with PHP

提问人:Ron 提问时间:3/9/2016 最后编辑:NanneRon 更新时间:3/14/2016 访问量:3267

问:

我尝试在我的非 framework-php 项目中设置 Sentry。它就像一个魅力,但有一件事困扰着我:

该代码非常不严格且容易引起注意。想象一下,每次用户点击发送 50 个通知给哨兵似乎是一大开销。(不,不幸的是,解决所有这些事情不在预算中!

所以我的问题是:有没有办法告诉哨兵只是发送级别及以上的错误?WARNING

这是我的代码:

error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);
require_once 'Raven/Autoloader.php';
Raven_Autoloader::register();

$client = new Raven_Client('myurl');
$error_handler = new Raven_ErrorHandler($client);
$error_handler->registerExceptionHandler();
$error_handler->registerErrorHandler();
$error_handler->registerShutdownFunction();
PHP 错误报告 哨兵

评论


答:

5赞 Nanne 3/10/2016 #1

您应该查看您正在设置的处理程序。例如,您可以执行以下操作:

$error_handler = new \Raven_ErrorHandler($client);
$error_handler->registerErrorHandler(true, E_ALL & ~E_DEPRECATED & ~E_NOTICE & ~E_USER_DEPRECATED);

这只会发送某些错误。我认为添加 ExceptionHandler 是“安全的”,但要小心 shutdownhandler。

更多信息:shutdownhandler 有点“贪婪”。 它调用该函数,但这确实处理了更多,而不仅仅是致命错误。对于我的系统(但我有一个更复杂的日志记录系统),这已经足够了,但是如果您由于 shutdownfunction 不存在而开始丢失错误,您应该为文件创建一个子类,并覆盖该函数。handleFatalErrorErrorHandlerhandleFatalError()

如果你看一下代码,你会看到它调用了 private ,它返回了你可以给它的额外类型,并结合了这个列表:getErrorTypesToProcess

private $validErrorTypes = array(
    E_ERROR,
    E_WARNING,
    E_PARSE,
    E_NOTICE,
    E_CORE_ERROR,
    E_CORE_WARNING,
    E_COMPILE_ERROR,
    E_COMPILE_WARNING,
    E_USER_ERROR,
    E_USER_WARNING,
    E_USER_NOTICE,
    E_STRICT,
    E_RECOVERABLE_ERROR,
    E_DEPRECATED,
    E_USER_DEPRECATED,
);

这对我来说有点大:) 但如前所述,您可能像我一样,只需跳过 shutdownfunction 就可以了吗?

有关参考,请参阅以下线程:


https://github.com/getsentry/raven-php/issues/168 https://github.com/getsentry/raven-php/pull/181
https://github.com/getsentry/raven-php/issues/266

评论

0赞 Ron 3/10/2016
非常感谢您的回答!我试图将错误传递给 errorHandler,就像上面在您的帖子中提到的那样,但它仍然发送通知。我错过了什么吗?
1赞 Nanne 3/10/2016
您是否删除了 shutdown-handler 调用?
0赞 Ron 3/10/2016
好吧,以为这是第二种方法!现在它起作用了 - 谢谢:)我会尝试将错误处理程序子类化!
0赞 Ron 3/11/2016
最后,我需要操作代码,以便可以使用关闭处理程序。否则我不会在大崩溃时被注意到......但就目前而言,它似乎有效。