跳转到主内容
极星编程网:以代码为星,赴技术山海!

如何在CodeIgniter中使用Rollbar_CodeIgniter错误追踪服务【追踪】

CodeIgniter 需按版本选择 Rollbar 集成方式:CI3 用过时的 Rollbar_CodeIgniter v1.x(仅兼容 PHP 7.4);CI4 应直连 rollbar/rollbar-php v2+,通过 Errors.php 和 ErrorHandler.php 手动上报,且须配对 access_token、environment 并关闭 display_errors。 CodeIgniter 本身不内置远程错误上报能力,
Rollbar_CodeIgniter
是社区维护的轻量适配层,它把 CodeIgniter 的异常和日志转发给 Rollbar 服务。直接装官方
rollbar/rollbar-php
SDK 并手动 hook 就行,不需要额外找“专用包”——那些包大多已停止更新,且与 CI4 的 PSR-15 中间件机制不兼容。 确认你用的是 CodeIgniter 3 还是 4 这是最关键的前置判断: CI3:靠
Exceptions::log_exception()
和
set_exception_handler()
拦截;
Rollbar_CodeIgniter
(v1.x)能跑,但依赖过时的
rollbar/rollbar
v0.x,已不支持 PHP 8.1+; CI4:原生支持 PSR-3 日志器 + 异常监听器,应直接集成官方
rollbar/rollbar-php
v2+,通过
App\Errors\ErrorLogger
或自定义
ThrowableRenderer
注入; 查版本最准的方式是看
system/CodeIgniter.php
文件头注释,或运行
php -r "echo CI_VERSION;"
(CI3) /
php spark version
(CI4)。 CI4 中集成 Rollbar 的标准做法 跳过所有第三方封装,直连官方 SDK: 用 Composer 安装:
composer require rollbar/rollbar-php
; 在
app/Config/Services.php
的
public static function errors()
方法里注册 Rollbar 实例(不要塞进
logging
); 重写
app/Config/Exceptions.php
中的
$handles
数组,确保
Throwable
被捕获; 关键一步:在
app/Errors/ErrorHandler.php
(或新建该文件)中,于
handleException()
和
handleError()
里调用
\Rollbar\Rollbar::error()
或
::critical()
; 注意:CI4 默认会把
error_log()
写入
writable/logs/
,Rollbar 不会自动接管这部分,需显式转发 —— 别指望
log_threshold
设置能触发上报。 CI3 中勉强可用但必须降级的方案 仅限仍运行 PHP 7.4 且无法升级的遗留系统: 强制指定旧版依赖:
composer require rollbar/rollbar:0.18.2 phpdocumentor/reflection-docblock:2.0.4
;
Rollbar_CodeIgniter
的
config/rollbar.php
必须设
'environment' => ENVIRONMENT
,否则生产环境默认静默; CI3 的数据库错误(如
mysqli
报错)默认不走
Exceptions::log_exception()
,得在
system/database/DB_driver.php
的
_error_handler()
末尾手动加
\Rollbar\Rollbar::error($msg, $err)
; 常见报错:
Call to undefined method Rollbar\Payload\Level::fromName()
,说明 SDK 版本和封装层不匹配,立刻回退到 v0.18.2。 容易被忽略的配置细节 无论 CI3 或 CI4,以下三项不设对,90% 的错误根本不会发到 Rollbar 后台:
access_token
必须是 “post_server_item” 类型的 token,不是 dashboard 或 read-only token;
environment
值要和 CI 的
ENVIRONMENT
常量一致(如
'development'
、
'staging'
),Rollbar 控制台按此过滤; CI4 的
.env
若设了
CI_ENVIRONMENT = production
,但没关掉
display_errors
,PHP 会先吐出致命错误页面,Rollbar 来不及捕获 —— 必须确保
ini_set('display_errors', '0')
在入口脚本早期执行。

相关文章