当前位置: 首页 > 工具软件 > PHP Sentry > 使用案例 >

PHP中使用Sentry(二)

武元白
2023-12-01

一、可选属性

通过调用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支持以下级别:

  • debug (the least serious)
  • info
  • warning
  • error
  • fatal (the most serious)

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!

 

 类似资料: