使用 PHP 配置发送到 Sentry 的内容
Posted
技术标签:
【中文标题】使用 PHP 配置发送到 Sentry 的内容【英文标题】:Configure what is sent to Sentry with PHP 【发布时间】:2016-06-23 11:42:31 【问题描述】:我尝试在我的 non-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();
【问题讨论】:
【参考方案1】:您应该查看正在设置的处理程序。例如,您可以这样做:
$error_handler = new \Raven_ErrorHandler($client);
$error_handler->registerErrorHandler(true, E_ALL & ~E_DEPRECATED & ~E_NOTICE & ~E_USER_DEPRECATED);
这只会发送某些错误。我认为添加 ExceptionHandler 是“安全的”,但请注意关闭处理程序。
更多信息:shutdownhandler 有点“贪婪”。
它调用handleFatalError
函数,但这确实处理了更多然后只是致命错误。对于我的系统(但我有一个更复杂的日志系统),这已经足够了,但是如果由于关闭功能不存在而开始丢失错误,您应该为 ErrorHandler
文件创建一个子类,并覆盖 @987654327 @函数。
如果您查看代码,您会发现它调用了私有 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,
);
这对我来说有点大 :) 但如前所述,您可能和我一样,只是跳过关机功能可以正常工作吗?
有关参考,请参阅以下主题:
https://github.com/getsentry/raven-php/issues/168https://github.com/getsentry/raven-php/pull/181https://github.com/getsentry/raven-php/issues/266
【讨论】:
非常感谢您的回答!我试图将错误传递给您帖子中提到的 errorHandler,但它仍然会发送通知。我错过了什么吗? 您是否删除了关机处理程序调用? 好的,以为这是第二种方法!现在它可以工作了 - 谢谢 :) 我将尝试使用子类化错误处理程序! 最后我需要操作代码,以便可以使用关闭处理程序。否则我不会在大崩溃时引起注意......但现在它似乎有效。以上是关于使用 PHP 配置发送到 Sentry 的内容的主要内容,如果未能解决你的问题,请参考以下文章
Flutter - Sentry如何在调试模式下发送事件和停止发送