定制 itgalaxy/sentry-integration 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

itgalaxy/sentry-integration

Composer 安装命令:

composer require itgalaxy/sentry-integration

包简介

A (unofficial) WordPress plugin to report PHP and JavaScript errors to Sentry

README 文档

README

Build Status Coverage Status Latest Stable Version Total Downloads Latest Unstable Version License composer.lock

A (unofficial) WordPress plugin to report PHP, JavaScript and security headers (Expect-CT and X-XSS-Protection) errors to Sentry.

Introduction

This plugin can report PHP errors (optionally), JavaScript errors (optionally) and security headers (Expect-CT and X-XSS-Protection) (optionally) to Sentry and integrates with its release tracking.

It will auto detect authenticated users and add context where possible. All context/tags can be adjusted using filters mentioned below.

Usage

  1. Install this plugin by cloning or copying this repository to your wp-contents/plugins folder
  2. Configure your DSN as explained below
  3. Activate the plugin through the WordPress admin interface

Note: this plugin does not do anything by default and has no admin interface. A DSN must be configured first.

Configuration

PHP tracker

Track PHP errors by adding this snippet to your wp-config.php and replace ADDRESS_YOUR_DSN with your actual DSN that you find in Sentry:

define('SENTRY_INTEGRATION_DSN', 'ADDRESS_YOUR_DSN');
// Example `ADDRESS_YOUR_DSN` value - https://1fbf25e90f114a3d83a19aa4fa432dcf:3c13a039710e4287900bc71552b1e268@sentry.io/1

Note: Do not set this constant to disable the PHP tracker.

(Optionally) Set the error types the PHP tracker will track:

define(
  'SENTRY_INTEGRATION_ERROR_TYPES',
  E_ALL & ~E_DEPRECATED & ~E_NOTICE & ~E_USER_DEPRECATED
);

JavaScript tracker

Track JavaScript errors by adding this snippet to your wp-config.php and replace PUBLIC_ADDRESS_YOUR_DSN with your actual public DSN that you find in Sentry (never use your private DSN):

define('SENTRY_INTEGRATION_PUBLIC_DSN', 'PUBLIC_ADDRESS_YOUR_DSN');
// Example `PUBLIC_ADDRESS_YOUR_DSN` value - https://1fbf25e90f114a3d83a19aa4fa432dcf@sentry.io/1

Note: Do not set this constant to disable the JavaScript tracker.

(Optionally) You can control how plugin should register and enqueue sentry JavaScript script (i.e. raven.min.js):

define('SENTRY_INTEGRATION_PUBLIC_DSN_ENQUEUE_MODE', 'manual');

There are 3 values for SENTRY_INTEGRATION_PUBLIC_DSN_ENQUEUE_MODE constant.

  1. inline (by default for better performance and avoid problems with order scripts from other plugins/themes) - print inline script and configuration in head html tag.
  2. standard - use standard WordPress api for scripts (i.e. using wp_register_script, wp_enqueue_script and wp_add_inline_script functions on wp_enqueue_scripts, login_enqueue_scripts and admin_enqueue_scripts actions).
  3. manual - don't register and enqueue script and configuration. You should manually register and enqueue sentry JavaScript script with configuration.

Expect-CT header tracker

Track Expect-CT header errors by adding this snippet to your wp-config.php and replace ADDRESS_YOUR_DSN with your actual DSN that you find in Sentry:

define('SENTRY_INTEGRATION_EXPECT_CT_DSN', 'ADDRESS_YOUR_DSN');
// Example `ADDRESS_YOUR_DSN` value - https://1fbf25e90f114a3d83a19aa4fa432dcf@sentry.io/1

Note: Do not set this constant to disable the Expect-CT tracker. Note: You should send Expect-CT header with report-uri="http://you-site.com/sentry-integration/expect-ct/report/" using .htaccess, php or another prefer method. See more about Expect-CT header.

X-XSS-Protection tracker

Track X-XSS-Protection header errors by adding this snippet to your wp-config.php and replace ADDRESS_YOUR_DSN with your actual DSN that you find in Sentry:

define('SENTRY_INTEGRATION_X_XSS_PROTECTION_DSN', 'ADDRESS_YOUR_DSN');
// Example `ADDRESS_YOUR_DSN` value - https://1fbf25e90f114a3d83a19aa4fa432dcf@sentry.io/1

Note: Do not set this constant to disable the X-XSS-Protection tracker. Note: You should send X-XSS-Protection header with report="http://you-site.com/sentry-integration/x-xss-protection/report/" using .htaccess, php or another prefer method. See more about X-XSS-Protection header.

Common configuration for all trackers

(Optionally) Define a version of your site; by default the theme version will be used. This is used for tracking at which version of your site the error occurred. When combined with release tracking this is a very powerful feature.

define('SENTRY_INTEGRATION_VERSION', 'v2.1.3');

(Optionally) Define an environment of your site. Defaults to unspecified.

define('SENTRY_INTEGRATION_ENV', 'production');

Note: By default SENTRY_INTEGRATION_VERSION constant contains wp_get_theme()->get('Version') result.

Filters

This plugin provides the following filters to plugin/theme developers.

Please note that some filters are fired when the Sentry trackers are initialized so they won't fire if you define them in you theme or in a plugin that loads after Sentry Integration does.

For PHP, JavaScript, Expect-CT and X-XSS-Protection trackers

sentry_integration_user_context (array)

You can use this filter to extend the Sentry user context for both PHP, JS and security headers trackers.

WARNING: These values are exposed to the public in the JS tracker, so make sure you do not expose anything private!

Example usage:

/**
 * Customize sentry user context.
 *
 * @param array $user The current sentry user context.
 *
 * @return array
 */
function customize_sentry_user_context(array $user)
{
  return array_merge($user, array(
    'a-custom-user-meta-key' => 'custom value'
  ));
}

add_filter('sentry_integration_user_context', 'customize_sentry_user_context');

Note: This filter fires on the WordPress set_current_user action.

Specific to PHP tracker

sentry_integration_dsn (string)

You can use this filter to override the Sentry DSN used for the PHP tracker.

Example usage:

/**
 * Customize sentry dsn.
 *
 * @param string $dsn The current sentry public dsn.
 *
 * @return string
 */
function customize_sentry_dsn($dsn)
{
  return 'https://<key>:<secret>@sentry.io/<project>';
}

add_filter('sentry_integration_dsn', 'customize_sentry_dsn');

Note: This filter fires on when Sentry Integration initializes and after the WP after_setup_theme.

sentry_integration_options (array)

You can use this filter to customize the Sentry options used to initialize the PHP tracker.

Example usage:

/**
 * Customize sentry options.
 *
 * @param array $options The current sentry options.
 *
 * @return array
 */
function customize_sentry_options(array $options)
{
  return array_merge($options, array(
    'tags' => array(
      'my-custom-tag' => 'custom value'
    )
  ));
}

add_filter('sentry_integration_options', 'customize_sentry_options');

Note: This filter fires on when Sentry Integration initializes and after the WP after_setup_theme.

sentry_integration_send_data (array|bool)

Provide a function which will be called before Sentry PHP tracker sends any data, allowing you both to mutate that data, as well as prevent it from being sent to the server.

Example usage:

/**
 * Customize sentry send data.
 *
 * @param array $data The sentry send data.
 *
 * @return array|bool Return the data array or false to cancel the send operation.
 */
function filter_sentry_send_data(array $data)
{
  $data['tags']['my_custom_key'] = 'my_custom_value';

  return $data;
}

add_filter('sentry_integration_send_data', 'filter_sentry_send_data');

Note: This filter fires whenever the Sentry SDK is sending data to the Sentry server.

Specific to JavaScript tracker

sentry_integration_public_dsn (string)

You can use this filter to override the Sentry DSN used for the JS tracker.

WARNING: This value is exposed to the public, so make sure you do not use your private DSN!

Example usage:

/**
 * Customize public sentry dsn.
 *
 * @param string $dsn The current sentry public dsn.
 *
 * @return string
 */
function customize_public_sentry_dsn($dsn)
{
  return 'https://<key>@sentry.io/<project>';
}

add_filter('sentry_integration_public_dsn', 'customize_public_sentry_dsn');

sentry_integration_public_options (array)

You can use this filter to customize/override the sentry options used to initialize the JS tracker.

WARNING: These values are exposed to the public, so make sure you do not expose anything private !

Example usage:

/**
 * Customize public sentry options.
 *
 * @param array $options The current sentry public options.
 *
 * @return array
 */
function customize_public_sentry_options(array $options)
{
  return array_merge($options, array(
    'tags' => array(
      'custom-tag' => 'custom value'
    )
  ));
}

add_filter(
  'sentry_integration_public_options',
  'customize_sentry_public_options'
);

Specific to Expect-CT tracker

sentry_integration_expect_ct_dsn (string)

You can use this filter to override the Sentry DSN used for the Expect-CT tracker.

Example usage:

/**
 * Customize sentry dsn.
 *
 * @param string $dsn The current sentry public dsn.
 *
 * @return string
 */
function customize_sentry_dsn($dsn)
{
  return 'https://<key>:<secret>@sentry.io/<project>';
}

add_filter('sentry_integration_expect_ct_dsn', 'customize_sentry_dsn');

Note: This filter fires on when Sentry Integration initializes and after the WP after_setup_theme.

sentry_integration_expect_ct_options (array)

You can use this filter to customize the Sentry options used to initialize the Expect-CT tracker.

Example usage:

/**
 * Customize sentry options.
 *
 * @param array $options The current sentry options.
 *
 * @return array
 */
function customize_sentry_options(array $options)
{
  return array_merge($options, array(
    'tags' => array(
      'my-custom-tag' => 'custom value'
    )
  ));
}

add_filter('sentry_integration_expect_ct_options', 'customize_sentry_options');

Note: This filter fires on when Sentry Integration initializes and after the WP after_setup_theme.

sentry_integration_expect_ct_send_data (array|bool)

Provide a function which will be called before Sentry Expect-CT tracker sends any data, allowing you both to mutate that data, as well as prevent it from being sent to the server.

Example usage:

/**
 * Customize sentry send data.
 *
 * @param array $data The sentry send data.
 *
 * @return array|bool Return the data array or false to cancel the send operation.
 */
function filter_sentry_send_data(array $data)
{
  $data['tags']['my_custom_key'] = 'my_custom_value';

  return $data;
}

add_filter('sentry_integration_expect_ct_send_data', 'filter_sentry_send_data');

Note: This filter fires whenever the Sentry SDK is sending data to the Sentry server.

Specific to X-XSS-Protection tracker

sentry_integration_x_xss_protection_dsn (string)

You can use this filter to override the Sentry DSN used for the X-XSS-Protection tracker.

Example usage:

/**
 * Customize sentry dsn.
 *
 * @param string $dsn The current sentry public dsn.
 *
 * @return string
 */
function customize_sentry_dsn($dsn)
{
  return 'https://<key>:<secret>@sentry.io/<project>';
}

add_filter('sentry_integration_x_xss_protection_dsn', 'customize_sentry_dsn');

Note: This filter fires on when Sentry Integration initializes and after the WP after_setup_theme.

sentry_integration_x_xss_protection_options (array)

You can use this filter to customize the Sentry options used to initialize the Expect-CT tracker.

Example usage:

/**
 * Customize sentry options.
 *
 * @param array $options The current sentry options.
 *
 * @return array
 */
function customize_sentry_options(array $options)
{
  return array_merge($options, array(
    'tags' => array(
      'my-custom-tag' => 'custom value'
    )
  ));
}

add_filter(
  'sentry_integration_x_xss_protection_options',
  'customize_sentry_options'
);

Note: This filter fires on when Sentry Integration initializes and after the WP after_setup_theme.

sentry_integration_x_xss_protection_send_data (array|bool)

Provide a function which will be called before Sentry Expect-CT tracker sends any data, allowing you both to mutate that data, as well as prevent it from being sent to the server.

Example usage:

/**
 * Customize sentry send data.
 *
 * @param array $data The sentry send data.
 *
 * @return array|bool Return the data array or false to cancel the send operation.
 */
function filter_sentry_send_data(array $data)
{
  $data['tags']['my_custom_key'] = 'my_custom_value';

  return $data;
}

add_filter(
  'sentry_integration_x_xss_protection_send_data',
  'filter_sentry_send_data'
);

Note: This filter fires whenever the Sentry SDK is sending data to the Sentry server.

Catching plugin errors

Since this plugin is called sentry-integration it loads a bit late which could miss errors or notices occuring in plugins that load before it.

You can remedy this by loading WordPress Sentry as a must-use plugin by creating the file wp-content/mu-plugins/sentry-integration.php (if the mu-plugins directory does not exists you must create that too).

<?php

/**
 * Plugin Name: Sentry Integration
 * Plugin URI: https://github.com/itgalaxy/sentry-integration
 * Description: A (unofficial) WordPress plugin to report PHP and JavaScript and security headers errors to Sentry.
 * Version: must-use-proxy
 * Author: Alexander Krasnoyarov
 * Author URI: https://github.com/evilebottnawi
 * License: MIT
 */

$sentry_integration =
  __DIR__ . '/../plugins/sentry-integration/sentry-integration.php';

if (!file_exists($sentry_integration)) {
  return;
}

require $sentry_integration;

define('SENTRY_INTEGRATION_MU_LOADED', true);

Now sentry-integration will load always and before all other plugins.

Note: We advise you leave the original sentry-integration in the /wp-content/plugins folder to still have updates come in through the WordPress updater. However enabling or disabling does nothing if the above script is active (since it will always be enabled).

License

Sentry Integration plugin is open-sourced software licensed under the MIT license.

itgalaxy/sentry-integration 适用场景与选型建议

itgalaxy/sentry-integration 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 5.63k 次下载、GitHub Stars 达 10, 最近一次更新时间为 2017 年 11 月 20 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「wordpress」 「sentry」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 itgalaxy/sentry-integration 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 itgalaxy/sentry-integration 我们能提供哪些服务?
定制开发 / 二次开发

基于 itgalaxy/sentry-integration 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 5.63k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 10
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 10
  • Watchers: 4
  • Forks: 1
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2017-11-20