interactivestrategies / wp-sentry-glue
基于Composer的WordPress与Sentry集成
Requires
- sentry/sdk: ^2 || ^3
- sentry/sentry: ^2.2 || ^3
Suggests
- oscarotero/env: Provides env() function
This package is not auto-updated.
Last update: 2022-09-23 22:09:13 UTC
README
此软件包将Sentry集成到WordPress中。它在一个WordPress项目和Sentry 2.x/3.x SDK之间添加了一小段粘合代码。具体来说,它提供了一些样板代码来简化调用PHP文档中指定的\Sentry\init()
,同时确保与WP-CLI兼容,并在添加额外信息的同时保证兼容性。
使用IS WP Sentry
为了初始化Sentry,需要初始化此软件包的SentryLoader类的一个实例: $sentryLoader = new \InteractiveStrategies\WpSentryGlue\SentryLoader();
。越早进行初始化越好,以便尽可能多地启用PHP代码的日志记录,但前提是Composer的自动加载器必须已包含在内。wp-config.php文件是一个不错的选择。
在WordPress初始化后,在代码中稍后调用函数SentryLoader->sentryWpContext();
。wp-config.php的底部是一个不错的选择。这将向事件日志中添加一些默认的WordPress上下文。(WordPress核心版本,以及登录用户的用户ID和姓名。)还会添加一个管理仪表板小工具,对所有具有manage_options角色的用户可见。
配置
至少,您应该设置一个DSN,并为每个服务器环境配置不同的环境字符串。建议您还配置Sentry发布跟踪。
有两种配置方式
- 将数组传递给SentryLoader指令。例如:
$sentryLoader = new \InteractiveStrategies\WpSentryGlue\SentryLoader($options_array);
SentryLoader的构造函数接受与Sentry\init()
相同的选项数组。 - 安装oscarotero/env (^1 || ^2) 并通过环境变量提供配置。
- 注意,如果没有安装oscarotero/env,此软件包无法读取环境变量。
- 注意,传递给SentryLoader构造函数的任何选项都不能被环境变量覆盖。
设置DSN
DSN可以通过环境变量SENTRY_DSN
设置。
DSN看起来像https://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@sentry.io/1234567'
。这是Sentry必须有的一个东西,因为它告诉Sentry客户端将记录的事件发送到哪里。DSN始终可在sentry.io(或您自己的Sentry主机)的项目设置中找到。它还应该在新项目没有记录事件的情况下显示在Sentry UI的其他地方。
配置环境
可以通过环境变量SENTRY_ENVIRONMENT
设置环境。
Sentry会跟踪每个事件发生的环境。默认情况下,此集成将Sentry事件记录为来自“本地”环境。这样,在本地实例的网站上工作的开发者不必担心忘记设置此变量。
在服务器环境中,应根据适当的情况将环境设置为开发、生产等。
配置发布
Sentry还可以标记在事件发生时网站运行的是哪种代码部署。这可以帮助您确定例如问题最早出现的最早提交。有关更多详细信息,请参阅官方Sentry发布文档。
发布值可以通过环境变量SENTRY_RELEASE
设置。在某些提供CLI或API以设置环境变量的托管主机上,这可能是一个好选项,但在其他情况下,设置环境变量可能很难,并且难以作为部署过程的一部分保留。
另一种选择是在网站的根目录下创建一个名为 ".sentryrelease" 的文本文件,其中包含发布字符串。在环境变量难以由部署过程管理的情况下,写入文件可能是一个可行的选择。
注意:使用 .sentryrelease 文件需要在调用 initSentry() 之前设置 ABSPATH
常量。根据您的 WordPress 设置,ABSPATH
可能要在 WordPress 初始化之后才设置,这意味着您可能需要在执行流程的较后阶段初始化 SentryLoader。
堆栈跟踪
可以通过环境变量 SENTRY_ALWAYS_STACKTRACE
来设置。
Sentry 会将任何它记录的异常的堆栈跟踪数据发送出去。然而,默认情况下,其他事件则不包含堆栈跟踪数据。
除了向开发者提供更少的信息外,这还会影响 Sentry 将事件分组为问题的方法。正如 Sentry 关于问题分组的文档 所解释的那样,Sentry 部分地通过堆栈跟踪对事件进行排序。对于没有堆栈跟踪的事件,它必须退回到其他更简单的方法,这些方法倾向于将更多的事件分组为较少的问题。
不启用此功能的一个原因是因为添加堆栈跟踪会增加 Sentry 在记录事件时需要发送的数据量。如果在执行同一请求时记录了多个事件,这会增加 Sentry 自身引起问题的风险:可能是明显的性能影响,或者最坏的情况是 PHP 执行超时。
WordPress 用户数据
默认情况下,登录的 WordPress 用户(如果用户已登录)将被记录在 Sentry 事件中,只要您在代码中调用 SentryLoader::sentryWpContext()
(见上文)。
如果您不希望记录用户,请将环境变量 SENTRY_OMIT_WP_USER_DATA
设置为真值。(sentryWpContext()
仍然可以标记 WordPress 核心版本,因此您仍然应该调用此方法。)
Sentry 文档
如果您想在此包提供的选项之外自定义 Sentry,则适用 Sentry 文档。
请记住,SentryLoader 构造函数接受与 \Sentry\init()
相同的选项数组。
替代方案
此集成旨在是一个轻量级的服务器端 Sentry 集成,能够在 PHP 执行的早期激活。
例如,像 (WordPress Sentry)(https://wordpresstheme.cn/plugins/wp-sentry-integration) 这样的插件具有局限性,即作为标准插件流程的一部分加载,这意味着它们不会在执行早期拦截后端错误。但是,它们可能提供比此集成更多的功能。例如,WordPress Sentry 可以管理客户端的 Sentry 集成。