用PHP配置发送到Sentry的内容

用PHP配置发送到Sentry的内容,php,error-reporting,sentry,Php,Error Reporting,Sentry,我尝试在我的非框架php项目中设置Sentry。它就像一种魅力,但有一件事困扰着我: 代码非常松散,容易引起注意。想象一下为每个用户发送50条通知给哨兵似乎是一笔巨大的开销。(不幸的是,解决所有这些问题都不在预算之内!) 所以我的问题是:有没有办法告诉哨兵只发送级别警告及以上的错误 这是我的代码: error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED); require_once 'Raven/Auto

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

代码非常松散,容易引起注意。想象一下为每个用户发送50条通知给哨兵似乎是一笔巨大的开销。(不幸的是,解决所有这些问题都不在预算之内!)

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

这是我的代码:

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是“安全”的,但是请注意shutdownhandler

更多信息:shutdownhandler有点“贪婪”。 它调用
handleFatalError
函数,但它处理的不仅仅是致命错误。对于我的系统(但我有一个更复杂的日志系统),这就足够了,但是如果因为没有关闭函数而开始缺少错误,那么应该为
ErrorHandler
文件创建一个子类,并重写
handleFatalError()
函数

如果查看代码,您会看到它调用private
getErrorTypeStopProcess
,该函数返回您可以提供给它的额外类型,并结合以下列表:

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,
);
这对我来说有点大:) 但正如我所说,你可能和我一样,跳过关机功能就可以了

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




谢谢你的回答!我试图将错误传递给你的帖子中提到的errorHandler,但它仍然会发送通知。我遗漏了什么吗?你删除了关机处理程序调用了吗?好的,我还以为这是第二种方法呢!现在它可以工作了-谢谢:)我将尝试将错误处理程序子类化!最后,我需要操作代码,以便使用关机处理程序。否则我就不会在重大事故中被注意到。。。但就目前而言,这似乎奏效了。