benborla / zend-sentry
一个允许您将日志记录到 Sentry 服务的 Zend Framework 模块。这是为我的个人测试环境重新上传的。
Requires (Dev)
- cloud-solutions/zend-sentry: 2.4.0
- larapack/dd: ^1.1
- sentry/sentry: 1.7.0
Conflicts
- zendframework/zendframework: <2.5.3
This package is auto-updated.
Last update: 2024-09-06 16:07:34 UTC
README
一个允许您将异常、错误或其他您希望记录的内容记录到 Sentry 服务的 Zend Framework 模块。
ZendSentry 采用新 BSD 许可证发布。
当前版本的 ZendSentry for ZF2 是 2.4.0
。它支持 Zend Framework >= 2.5.3。对于旧版本,请查看 1.*
系列的遗留分支和标签。对于与 ZF3 兼容的版本,请在 3.*
分支中安装发行版。
重要变更
- 3.2.0 和 2.4.0: 将依赖项升级到
sentry/sentry
1.7.0 和ravenjs
3.17.0 - 3.0.1: ViewHelper 修复
- 3.0.0: 首个包含最新的 Sentry SDK 依赖项和 ZF3 兼容性修复的 ZF2 发布版本
- 2.2.1: 修复:如果存在,则仅断开 HttpExceptionStrategy
- 2.0.0: 新的主要版本,适用于 ZF >=2.5.3
- 1.5.2: 可配置的错误消息
- 1.4.0: 如果需要,Raven 配置可以通过 ZendSentry 配置覆盖
- 1.2.0: 支持 tags,每个日志操作都返回 Sentry 事件_id,Raven 作为 Service 注册
- 0.3.1: 专门的 CLI ExceptionStrategy (归功于 Mateusz Mirosławski)
介绍
什么是 Sentry?
Sentry 是一个在线服务,您可以将其中的任何内容记录下来,包括您的异常和错误。Sentry 会实时创建漂亮的报告,并为您汇总记录的数据。
什么是 ZendSentry?
它是一个模块,用于在您的 Zend Framework 2 应用程序和 Sentry 服务之间建立桥梁。它设置非常简单,并且具有许多开箱即用的功能。
当前功能
- 自动将未捕获的 PHP 异常记录到 Sentry
- 自动将 PHP 错误记录到 Sentry
- 自动将未捕获的 JavaScript 错误记录到 Sentry
- 通过触发事件监听器将异常捕获到 Sentry
- 通过触发事件监听器将您喜欢记录的任何内容记录到 Sentry
- HTTP 和 CLI (自动选择) 的 ZF 异常策略
- 记录操作返回 Sentry 事件_id
- Raven 作为 Service 注册
- 覆盖 Raven 配置默认值
安装
此模块可在 Packagist 上找到。在您的项目 composer.json
中使用
{
"require": {
"cloud-solutions/zend-sentry": "2.4.0"
}
运行 php composer.phar update
以将其下载到您的 vendor 文件夹并设置自动加载。
现在将 zend-sentry.local.php.dist
复制到 yourapp/config/autoload/zend-sentry.local.php
并添加您的 Sentry API 密钥。然后同样将 zend-sentry.global.php.dist
复制到同一位置,也删除 .dist
。如有需要,请调整设置。
将 ZendSentry
添加到您的 application.config.php
中的模块数组中,最好作为第一个模块。
就是这样。您不需要做任何事情,所有功能在该阶段都正常工作,试试吧。祝您记录愉快!
基本自动使用
再次强调,您不需要编写任何代码就能使它工作。默认设置将确保Sentry注册为错误和异常处理器,试试吧,通过触发错误或抛出一些异常。您应该会立即在Sentry仪表板上看到它们。ZendSentry还打包了自己的异常策略,以确保ZF可能拦截的异常被记录下来。
手动使用
此外,该模块在应用级别注册了一个日志事件监听器。因此,您可以从应用程序的任何地方触发自定义日志事件。
在一个控制器中,您可以这样做
$this->getEventManager()->trigger('log', $this, array(
'priority' => \Zend\Log\Logger::INFO,
'message' => 'I am a message and I have been logged'
));
或者,您可以存储返回的Sentry event_id
以进行处理
$eventID = $this->getEventManager()->trigger('log', $this, array(
'priority' => \Zend\Log\Logger::INFO,
'message' => 'I am a message and I have been logged'
));
现在您可以将ID告诉您的用户或API消费者,他们可以引用它,例如在请求支持时。
请确保将"log"
作为第一个参数,将$this
或一个自定义上下文字符串作为第二个参数传递。请保持一致性,因为Sentry将使用此信息对您的日志条目进行分组。作为第三个参数,您想传递一个包含优先级键和消息键的数组。最好使用Zend Framework提供的优先级。它们将被映射到Sentry自己的优先级。
除了未捕获的异常和错误会自动记录外,您还可以通过直接使用相应的监听器手动记录捕获或未捕获的异常
try {
throw new Exception('throw and catch');
} catch (Exception $exception) {
$result = $this->getEventManager()->trigger('logException', $this, array('exception' => $exception));
//get Sentry event_id by retrieving it from the EventManager ResultCollection
$eventID = $result->last();
}
使用标签
您还可以向Sentry传递自己的标签。该服务将自动为这些标签创建过滤和排序。当使用log
事件时,您可以选择性地以这种方式传递标签
$this->getEventManager()->trigger('log', $this, array(
'priority' => \Zend\Log\Logger::INFO,
'message' => 'I am a message with a language tag',
'tags' => array('language' => 'en'),
'extra' => array('email' => 'test@test.com'),
));
如果手动使用logException
事件,您也可以传递标签
try {
throw new Exception('throw and catch with tags');
} catch (Exception $exception) {
$this->getEventManager()->trigger('logException', $this, array('exception' => $exception, 'tags' => array('language' => 'fr')));
}
注意!每个标签都需要一个键和一个值。
下面是如何为自动记录的异常使用标签的示例。
Raven作为服务
该模块将Raven_Client注册为应用级别的服务。通常您不想直接访问它,因为触发事件监听器会让您的代码更简洁。Raven直接使用的例子之一是添加用户上下文。例如,您可能在引导阶段做如下操作
if ($authenticationService->hasIdentity()) {
$ravenClient = $this->serviceManager->get('raven');
$ravenClient->user_context($authenticationService->getIdentity()->userID);
}
如果您想要向上下文中添加一些标签,这些标签将与每次自动条目一起发送,您可以直接使用Raven。例如,您可能在AbstractActionController::preDispatch()
中这样做
$serviceManager = $mvcEvent->getApplication()->getServiceManager();
if ($serviceManager->has('raven')) {
$ravenClient = $serviceManager->get('raven');
$ravenClient->tags_context(
[
'locale' => $this->translator()->getLocale(),
...
]
);
}
配置选项
仅作记录,以下是实际的全局配置选项的副本
/**
* Turn ZendSentry off or on as a whole package
*/
'use-module' => true,
/**
* Attach a generic logger event listener so you can log custom messages from anywhere in your app
*/
'attach-log-listener' => true,
/**
* Register the Sentry logger as PHP error handler
*/
'handle-errors' => true,
/**
* Should the previously registered error handler be called as well?
*/
'call-existing-error-handler' => true,
/**
* Register Sentry as shutdown error handler
*/
'handle-shutdown-errors' => true,
/**
* Register the Sentry logger as PHP exception handler
*/
'handle-exceptions' => true,
/**
* Should the previously registered exception handler be called as well
*/
'call-existing-exception-handler' => true,
/**
* Which errors should be reported to sentry (bitmask), e. g. E_ALL ^ E_DEPRECATED
* Defaults to -1 to report all possible errors (equivalent to E_ALL in >= PHP 5.4)
*/
'error-reporting' => -1,
/**
* Should exceptions be displayed on the screen?
*/
'display-exceptions' => false,
/**
* If Exceptions are displayed on screen, this is the default message
*/
'default-exception-message' => 'Oh no. Something went wrong, but we have been notified. If you are testing, tell us your eventID: %s',
/**
* If Exceptions are displayed on screen, this is the default message in php cli mode
*/
'default-exception-console-message' => "Oh no. Something went wrong, but we have been notified.\n",
/**
* Should Sentry also log javascript errors?
*/
'handle-javascript-errors' => true,
/**
* Set raven config options here.
* Raven has sensible defaults set in Raven_Client, if you need to override them, this is where you can do it.
*/
'raven-config' => array(),
试试吧
一些从控制器或视图尝试不同功能的想法
// Test logging of PHP errors
// trigger_error('can I trigger an error from a controller');
// Test logging of PHP exceptions
// throw new \Exception('Some exception gets logged.');
// Throw a javascript error and see it logged (add to view or layout)
// $headScript->appendScript("throw new Error('A javascript error should be logged.');");