talentrydev/rollbar 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

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

talentrydev/rollbar

Composer 安装命令:

composer require talentrydev/rollbar

包简介

Monitors errors and exceptions and reports them to Rollbar

README 文档

README

layout page
sidebar rollbar_sidebar
permalink /notifiers/rollbar-php/
toc false

Rollbar notifier for PHP Build Status

This library detects errors and exceptions in your application and reports them to Rollbar for alerts, reporting, and analysis.

##Table of Contents

Quick start

<?php
// installs global error and exception handlers
Rollbar::init(array('access_token' => 'POST_SERVER_ITEM_ACCESS_TOKEN'));

try {
    throw new Exception('test exception');
} catch (Exception $e) {
    Rollbar::report_exception($e);
}

// Message at level 'info'
Rollbar::report_message('testing 123', Level::INFO);

// With extra data (3rd arg) and custom payload options (4th arg)
Rollbar::report_message('testing 123', Level::INFO,
                        // key-value additional data
                        array("some_key" => "some value"),  
                        // payload options (overrides defaults) - see api docs
                        array("fingerprint" => "custom-fingerprint-here"));

// raises an E_NOTICE which will *not* be reported by the error handler
$foo = $bar;

// will be reported by the exception handler
throw new Exception('test 2');
?>

Installation

General

Download rollbar.php and Level.php and put them together somewhere you can access.

If Using Composer

Add rollbar/rollbar to your composer.json:

{
    "require": {
        "rollbar/rollbar": "~0.18.0"
    }
}

Setup

Add the following code at your application's entry point:

<?php
require_once 'rollbar.php';

$config = array(
    // required
    'access_token' => 'POST_SERVER_ITEM_ACCESS_TOKEN',
    // optional - environment name. any string will do.
    'environment' => 'production',
    // optional - path to directory your code is in. used for linking stack traces.
    'root' => '/Users/brian/www/myapp'
);
Rollbar::init($config);
?>

Be sure to replace POST_SERVER_ITEM_ACCESS_TOKEN with your project's post_server_item access token, which you can find in the Rollbar.com interface.

This will install an exception handler (with set_exception_handler) and an error handler (with set_error_handler). If you'd rather not do that:

<?php
$set_exception_handler = false;
$set_error_handler = false;
Rollbar::init($config, $set_exception_handler, $set_error_handler);
?>

For Heroku Users

First, add the addon:

heroku addons:create rollbar:free

The access_token and root config variables will be automatically detected, so the config is simply:

<?php
Rollbar::init(array(
    'environment' => 'production'
));
?>

Basic Usage

That's it! Uncaught errors and exceptions will now be reported to Rollbar.

If you'd like to report exceptions that you catch yourself:

<?php
try {
    do_something();
} catch (Exception $e) {
    Rollbar::report_exception($e);
    // or
    Rollbar::report_exception($e, array("my" => "extra", "data" => 42));
}
?>

You can also send Rollbar log-like messages:

<?php
Rollbar::report_message('could not connect to mysql server', Level::WARNING);
Rollbar::report_message('Here is a message with some additional data',
    Level::INFO, array('x' => 10, 'code' => 'blue'));
?>

Batching

By default, payloads are batched and sent to the Rollbar servers at the end of every script execution via a shutdown handler, or when the batch size reaches 50, whichever comes first. This works well in standard short-lived scripts, like serving web requests.

If you're using Rollbar in a long-running script, such as a Laravel project or a background worker, you may want to manually flush the batch. To flush, simply call:

Rollbar::flush();

For example, if using Laravel, add the above line to your App::after() event handler. Or in a looping background worker, call it at the end of each loop.

You can also tune the max batch size or disable batching altogether. See the batch_size and batched config variables, documented below.

Using Monolog

Here is an example of how to use Rollbar as a handler for Monolog:

use Monolog\Logger;
use Monolog\Handler\RollbarHandler;

$config = array('access_token' => 'POST_SERVER_ITEM_ACCESS_TOKEN');

// installs global error and exception handlers
Rollbar::init($config);

$log = new Logger('test');
$log->pushHandler(new RollbarHandler(Rollbar::$instance));

try {
    throw new Exception('exception for monolog');
} catch (Exception $e) {
    $log->error($e);
}

Configuration

Asynchronous Reporting

By default, payloads (batched or not) are sent as part of script execution. This is easy to configure but may negatively impact performance. With some additional setup, payloads can be written to a local relay file instead; that file will be consumed by rollbar-agent asynchronously. To turn this on, set the following config params:

<?php
$config = array(
  // ... rest of current config
  'handler' => 'agent',
  'agent_log_location' => '/var/www'  // not including final slash. must be writeable by the user php runs as.
);
?>

You'll also need to run the agent. See the rollbar-agent docs for setup instructions.

Configuration reference

All of the following options can be passed as keys in the $config array.

access_token
Your project access token.
agent_log_location
Path to the directory where agent relay log files should be written. Should not include final slash. Only used when handler is `agent`.

Default: /var/www

base_api_url
The base api url to post to.

Default: https://api.rollbar.com/api/1/

batch_size
Flush batch early if it reaches this size.

Default: 50

batched
True to batch all reports from a single request together.

Default: true

branch
Name of the current branch.

Default: master

capture_error_stacktraces
Record full stacktraces for PHP errors.

Default: true

checkIgnore
Function called before sending payload to Rollbar, return true to stop the error from being sent to Rollbar.

Default: null
Parameters:

  • $isUncaught: boolean value set to true if the error was an uncaught exception.
  • $exception: a RollbarException instance that will allow you to get the message or exception
  • $payload: an array containing the payload as it will be sent to Rollbar. Payload schema can be found at https://rollbar.com/docs/api/items_post/

``` $config = array( 'access_token' => '...', 'checkIgnore' => function ($isUncaught, $exception, $payload) { if (isset($_SERVER['HTTP_USER_AGENT']) && strpos($_SERVER['HTTP_USER_AGENT'], 'Baiduspider') !== false) { // ignore baidu spider return true; }
    // no other ignores
    return false;
}; 

); Rollbar::init($config);

  </dd>

  <dt>code_version</dt>
  <dd>The currently-deployed version of your code/application (e.g. a Git SHA). Should be a string.

Default: `null`
  </dd>
  
  <dt>enable_utf8_sanizations</dt>
  <dd>set to false, to disable running iconv on the payload, may be needed if there is invalid characters, and the payload is being destroyed
  
Default: `true`
  </dd>

  <dt>environment</dt>
  <dd>Environment name, e.g. `'production'` or `'development'`

Default: `'production'`
  </dd>

  <dt>error_sample_rates</dt>
  <dd>Associative array mapping error numbers to sample rates. Sample rates are ratio out of 1, e.g. 0 is "never report", 1 is "always report", and 0.1 is "report 10% of the time". Sampling is done on a per-error basis.

Default: empty array, meaning all errors are reported.
  </dd>

  <dt>handler</dt>
  <dd>Either `'blocking'` or `'agent'`. `'blocking'` uses curl to send requests immediately; `'agent'` writes a relay log to be consumed by [rollbar-agent](https://github.com/rollbar/rollbar-agent).

Default: `'blocking'`
  </dd>

  <dt>host</dt>
  <dd>Server hostname.

Default: `null`, which will result in a call to `gethostname()` (or `php_uname('n')` if that function does not exist)
  </dd>

  <dt>include_error_code_context</dt>
  <dd>A boolean that indicates you wish to gather code context for instances of PHP Errors.
    This can take a while because it requires reading the file from disk, so it's off by default.

Default: false
  </dd>

  <dt>include_exception_code_context</dt>
  <dd>A boolean that indicates you wish to gather code context for instances of PHP Exeptions.
    This can take a while because it requires reading the file from disk, so it's off by default.

Default: false
  </dd>

  <dt>included_errno</dt>
  <dd>A bitmask that includes all of the error levels to report. E.g. (E_ERROR | E_WARNING) to only report E_ERROR and E_WARNING errors. This will be used in combination with `error_reporting()` to prevent reporting of errors if `use_error_reporting` is set to `true`.

Default: (E_ERROR | E_WARNING | E_PARSE | E_CORE_ERROR | E_USER_ERROR | E_RECOVERABLE_ERROR)
  </dd>

  <dt>logger</dt>
  <dd>An object that has a `log($level, $message)` method. If provided, will be used by RollbarNotifier to log messages.
  </dd>

  <dt>person</dt>
  <dd>An associative array containing data about the currently-logged in user. Required: `id`, optional: `username`, `email`. All values are strings.
  </dd>

  <dt>person_fn</dt>
  <dd>A function reference (string, etc. - anything that [call_user_func()](http://php.net/call_user_func) can handle) returning an array like the one for 'person'.
  </dd>

  <dt>root</dt>
  <dd>Path to your project's root dir
  </dd>

  <dt>scrub_fields</dt>
  <dd>Array of field names to scrub out of _POST and _SESSION. Values will be replaced with asterisks. If overriding, make sure to list all fields you want to scrub, not just fields you want to add to the default. Param names are converted to lowercase before comparing against the scrub list.

Default: `('passwd', 'password', 'secret', 'confirm_password', 'password_confirmation', 'auth_token', 'csrf_token')`
  </dd>

  <dt>shift_function</dt>
  <dd>Whether to shift function names in stack traces down one frame, so that the function name correctly reflects the context of each frame.

Default: `true`
  </dd>

  <dt>timeout</dt>
  <dd>Request timeout for posting to rollbar, in seconds.

Default: `3`
  </dd>

  <dt>report_suppressed</dt>
  <dd>Sets whether errors suppressed with '@' should be reported or not

Default: `false`
  </dd>

  <dt>use_error_reporting</dt>
  <dd>Sets whether to respect current `error_reporting()` level or not

Default: `false`
  </dd>

  <dt>proxy</dt>
  <dd>Send data via a proxy server.

E.g. Using a local proxy with no authentication

```php
<?php
$config['proxy'] = "127.0.0.1:8080";
?>

E.g. Using a local proxy with basic authentication

<?php
$config['proxy'] = array(
    'address' => '127.0.0.1:8080',
    'username' => 'my_user',
    'password' => 'my_password'
);
?>

Default: No proxy

Example use of error_sample_rates:

<?php
$config['error_sample_rates'] = array(
    // E_WARNING omitted, so defaults to 1
    E_NOTICE => 0.1,
    E_USER_ERROR => 0.5,
    // E_USER_WARNING will take the same value, 0.5
    E_USER_NOTICE => 0.1,
    // E_STRICT and beyond will all be 0.1
);
?>

Example use of person_fn:

<?php
function get_current_user() {
    if ($_SESSION['user_id']) {
        return array(
            'id' => $_SESSION['user_id'], // required - value is a string
            'username' => $_SESSION['username'], // optional - value is a string
            'email' => $_SESSION['user_email'] // optional - value is a string
        );
    }
    return null;
}
$config['person_fn'] = 'get_current_user';
?>

Related projects

A Laravel-specific package is available for integrating with Laravel: Laravel-Rollbar

A CakePHP-specific package is avaliable for integrating with CakePHP 2.x: CakeRollbar

Help / Support

If you run into any issues, please email us at support@rollbar.com

You can also find us in IRC: #rollbar on chat.freenode.net

For bug reports, please open an issue on GitHub.

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Added some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

Tests are in tests. To run the tests: phpunit

talentrydev/rollbar 适用场景与选型建议

talentrydev/rollbar 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 1.12k 次下载、GitHub Stars 达 0, 最近一次更新时间为 2021 年 12 月 07 日, 在 PHP 生态内属于活跃度较高的组件。

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

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

围绕 talentrydev/rollbar 我们能提供哪些服务?
定制开发 / 二次开发

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

BUG 修复 & 性能优化

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

项目外包 & 长期维护

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

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

统计信息

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

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2021-12-07