使用 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如何在调试模式下发送事件和停止发送

如何在 Python 中向 Sentry 发送日志记录附件?

Sentry 捕获错误时重定向到新页面

log4j on sentry实践

sentry 之 配置与测试

使用 php 向 IOS 设备发送推送通知