使用 PHP 配置发送到 Sentry 的内容
Configure what is sent to Sentry with PHP
我尝试在我的非框架-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();
您应该查看正在设置的处理程序。例如,您可以这样做:
$error_handler = new \Raven_ErrorHandler($client);
$error_handler->registerErrorHandler(true, E_ALL & ~E_DEPRECATED & ~E_NOTICE & ~E_USER_DEPRECATED);
这只会发送某些错误。我认为要添加 ExceptionHandler 'safe',但要注意 shutdownhandler。
更多信息:shutdownhandler 有点 'greedy'。
它调用 handleFatalError
函数,但这确实处理了比致命错误更多的错误。对于我的系统(但我有一个更复杂的日志系统)这就足够了,但是如果你因为关闭函数不存在而开始丢失错误,你应该为 ErrorHandler
文件创建一个 child-class ,并覆盖 handleFatalError()
函数。
如果你看一下代码,你会发现它调用了私有 getErrorTypesToProcess
,其中 returns 你可以给它的额外类型,结合这个列表:
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/168
https://github.com/getsentry/raven-php/pull/181
https://github.com/getsentry/raven-php/issues/266
我尝试在我的非框架-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();
您应该查看正在设置的处理程序。例如,您可以这样做:
$error_handler = new \Raven_ErrorHandler($client);
$error_handler->registerErrorHandler(true, E_ALL & ~E_DEPRECATED & ~E_NOTICE & ~E_USER_DEPRECATED);
这只会发送某些错误。我认为要添加 ExceptionHandler 'safe',但要注意 shutdownhandler。
更多信息:shutdownhandler 有点 'greedy'。
它调用 handleFatalError
函数,但这确实处理了比致命错误更多的错误。对于我的系统(但我有一个更复杂的日志系统)这就足够了,但是如果你因为关闭函数不存在而开始丢失错误,你应该为 ErrorHandler
文件创建一个 child-class ,并覆盖 handleFatalError()
函数。
如果你看一下代码,你会发现它调用了私有 getErrorTypesToProcess
,其中 returns 你可以给它的额外类型,结合这个列表:
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/168
https://github.com/getsentry/raven-php/pull/181
https://github.com/getsentry/raven-php/issues/266