一、可选属性
通过调用captureException或captureMessage,可以提供其他数据:
$sentryClient->captureException($ex, array(
'attr' => 'value',
));
extra
此活动的其他背景信息。必须是映射。子项可以是任何本机JSON类型。
array(
'extra' => array('key' => 'value')
)
fingerprint
用于对此事件进行分组的指纹。
array(
'fingerprint' => ['{{ default }}', 'other value']
)
level
事件的级别。默认为错误。
array(
'level' => 'warning'
)
Sentry支持以下级别:
logger
事件的记录器名称。
array(
'logger' => 'default'
)
tags
要使用此事件编制索引的标记。必须是字符串的映射。
array(
'tags' => array('key' => 'value')
)
user
代理用户。
array(
'user' => array(
'id' => 42,
'email' => 'clever-girl'
)
)
二、取回事件ID
事件ID是刚刚发送的事件的全局唯一ID。此事件ID可用于从Sentry中查找确切事件。
这通常用于为用户显示并向客户服务报告错误。
$sentryClient->getLastEventID();
三、用户反馈
要为崩溃报告启用用户反馈,您需要创建一个知道最后一个事件ID的错误处理程序。
<?php
$sentry = new \Raven_Client(https://<key>@sentry.io/<project>);
public class App {
function error500($exc) {
$event_id = $sentry->captureException($exc);
return $this->render('500.html', array(
'sentry_event_id' => $event_id,
), 500);
}
}
然后在您的模板中,您可以加载反馈小部件:
<!-- Sentry JS SDK 2.1.+ required -->
<script src="https://cdn.ravenjs.com/2.3.0/raven.min.js"></script>
{% if sentry_event_id %}
<script>
Raven.showReportDialog({
eventId: '{{ sentry_event_id }}',
// use the public DSN (dont include your secret!)
dsn: 'https://<key>@sentry.io/<project>'
});
</script>
{% endif %}
有关此功能的更多详细信息,请参阅“用户反馈”指南。
四、处理失败
SDK会尝试最大限度地减少故障,并且当它们发生时,它们总是会尽量避免将它们冒泡到您的应用程序中。如果您确实想知道事件何时无法记录,可以使用getLastError帮助程序:
if ($sentryClient->getLastError() !== null) {
echo "Something went very, very wrong";
// $sentryClient->getLastError() contains the error that occurred
} else {
// Give the user feedback
echo "Sorry, there was an error!";
echo "Your reference ID is " . $event_id;
}
五、面包屑
Sentry支持捕获面包屑 - 在问题发生之前发生的事件
$sentryClient->breadcrumbs->record(array(
'message' => 'Authenticating user as ' . $username,
'category' => 'auth',
'level' => 'info',
));
六、过滤错误
您可能希望阻止自动捕获某些区域。理想情况下,你只是避免在这种情况下呼唤Sentry,但这说起来容易做起来难。相反,您可以提供SDK在发送任何数据之前调用的函数,允许您改变该数据,并防止将其发送到服务器。
$sentryClient->setSendCallback(function($data) {
$ignore_types = array('Symfony\Component\HttpKernel\Exception\NotFoundHttpException');
if (isset($data['exception']) && in_array($data['exception']['values'][0]['type'], $ignore_types))
{
return false;
}
});
七、错误控制操作符
$my_file = @file('non_existent_file');
在这些情况下,Sentry永远不会捕获错误。如果您希望在该阶段捕获它,则需要手动调用PHP客户端:
$my_file = @file('non_existent_file');
if (!$my_file) {
// ...
$sentryClient->captureLastError();
}
八、测试您的连接
PHP客户端包含一个简单的帮助程序脚本,用于测试与Sentry主服务器的连接和凭据:
$ bin/sentry test https://<key>@sentry.io/<project>
Client configuration:
-> server: [https://sentry.io/api]
-> project: <project-id>
-> public_key: <key>
Sending a test event:
-> event ID: f1765c9aed4f4ceebe5a93df9eb2d34f
Done!