CodeIgniter 3钩子未执行:HTTP请求日志无记录问题
CodeIgniter 3 请求日志钩子无输出问题排查方案
1. 检查日志基础配置
- 确认
config/config.php的日志级别是否包含info类型:// 2 代表允许 error 和 info 级别的日志输出,3 则包含所有级别 $config['log_threshold'] = 2; - 验证日志路径权限与正确性:
确保$config['log_path'] = APPPATH.'logs/';application/logs文件夹对Web服务器进程(如www-data、apache)有读写权限,建议设置为755或775(避免使用777)。
2. 验证钩子触发时机
- 当前使用的
post_controller_constructor钩子仅在控制器存在且构造函数执行后触发。若请求未匹配到有效控制器(如访问不存在的路由、静态资源),钩子不会执行。 - 可临时切换到更早的钩子(如
pre_system)测试触发情况:
注意:$hook['pre_system'] = array( 'class' => 'Http_request_logger', 'function' => 'log_all', 'filename' => 'http_request_logger.php', 'filepath' => 'hooks', 'params' => array() );pre_system阶段无法调用get_instance(),需暂时修改钩子方法:public function log_all() { log_message('info', 'Hook triggered at pre_system stage.'); }
3. 检查钩子文件与类的有效性
- 确保
application/hooks/http_request_logger.php文件名与类名Http_request_logger大小写完全匹配(服务器系统为Linux时区分大小写)。 - 可暂时注释钩子文件开头的
BASEPATH验证逻辑,避免环境问题导致文件加载失败:// if (!defined('BASEPATH')) exit('No direct script access allowed');
4. 测试日志系统本身是否正常
在任意控制器中直接写入日志,确认日志功能无问题:
log_message('info', 'Test log from controller');
若该行也无法生成日志,说明问题出在日志配置或权限,与钩子无关。
5. 排查服务器环境报错
查看Web服务器错误日志(如Apache的error.log、Nginx的error.log),检查是否存在钩子文件加载失败、权限不足等具体报错信息。
内容的提问来源于stack exchange,提问作者sam
相关产品推荐
相关产品推荐

