You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 21:45:56