CodeIgniter 本身不内置 Rollbar,但可通过 Rollbar-PHP SDK 手动集成,关键在于覆盖默认异常/错误处理器,并确保生产环境不暴露敏感堆栈。

直接上结论:CodeIgniter 本身不内置 Rollbar,但可通过 Rollbar-PHP SDK 手动集成,关键在于覆盖默认异常/错误处理器,并确保生产环境不暴露敏感堆栈。
注册全局错误与异常处理器
CodeIgniter 的错误流在非 production 环境下会走框架自带的 Exceptions 类渲染页面,这会绕过 Rollbar。必须在 application/config/hooks.php 或入口文件(如 index.php)顶部尽早注册:
-
set_error_handler()捕获 PHP 警告、通知类错误(E_WARNING,E_NOTICE等) -
set_exception_handler()捕获未被捕获的Exception和Error(PHP 7+) -
register_shutdown_function()捕获致命错误(E_ERROR,E_PARSE),并用error_get_last()判断是否为未捕获致命错误
注意:不要在 MY_Exceptions 类里仅重写 show_exception() —— 那只是渲染逻辑,Rollbar 需要的是原始错误上下文。
配置 Rollbar SDK 并禁用开发环境上报
使用 Composer 安装后,在 application/config/config.php 或独立配置文件中初始化 SDK:
use Rollbar\Rollbar;
use Rollbar\Payload\Level;
$config = [
'access_token' => 'your_post_server_item_token',
'environment' => ENVIRONMENT, // 'development' / 'production'
'capture_error_trace' => true,
'capture_ip' => false, // 避免 GDPR 风险
'report_suppressed' => true, // 上报 @error 抑制的错误
];
// 仅在 production 环境启用上报
if (ENVIRONMENT === 'production') {
Rollbar::init($config);
}
常见坑:access_token 必须是 post_server_item 类型 Token;若误用 post_client_item,请求会静默失败且无日志提示;ENVIRONMENT 值需与 index.php 中定义完全一致(区分大小写)。
手动触发 Rollbar 记录业务异常
框架内业务逻辑(如模型层 MySQL 失败、API 参数校验不通过)不应依赖自动捕获,需主动调用:
- 记录警告级信息:
Rollbar::warning('Invalid API token', ['user_id' => $uid]) - 记录错误并附带上下文:
Rollbar::error('DB insert failed', ['query' => $sql, 'bindings' => $binds]) - 捕获已处理异常:
try { ... } catch (Exception $e) { Rollbar::error($e); throw $e; }
避免在循环中高频调用 Rollbar::error() —— Rollbar 默认有速率限制(每秒 10 条),超限请求会被丢弃,且不返回明确错误。
验证是否真正生效
最可靠的方式不是看 Dashboard 是否出现条目,而是检查实际网络请求:
- 在 Chrome DevTools 的 Network 标签页过滤
api.rollbar.com - 触发一个可复现的错误(如
trigger_error('test', E_USER_ERROR)) - 确认请求状态码为
200,响应体含{"err": 0, "result": "..."}
如果没看到请求,说明 SDK 未初始化或被环境判断拦截;如果看到 429 Too Many Requests,说明触发频率过高或未正确配置 environment 导致开发环境也上报;如果看到 400 Bad Request,大概率是 Token 错误或 payload 过大(Rollbar 单条上限约 1MB,但建议控制在 128KB 内)。


















