CodeIgniter3错误日志排查:如何定位触发404错误的页面
定位404资源请求触发页面的方法
自定义CodeIgniter的404日志逻辑
默认的404日志不会记录来源页面,你可以扩展框架的异常处理类来补充这个信息:- 在
application/core/目录下创建MY_Exceptions.php文件 - 写入以下代码:
class MY_Exceptions extends CI_Exceptions { public function show_404($page = '', $log_error = TRUE) { if ($log_error) { $referrer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '无来源页面'; log_message('error', '404页面不存在: ' . $page . ' | 来源页面: ' . $referrer); } parent::show_404($page, FALSE); } }
之后新产生的404日志会直接附带触发该请求的来源页面URL,帮你快速定位问题。
- 在
查看服务器访问日志
不管用Apache还是Nginx,服务器的访问日志里都会记录每个请求的Referer字段。你可以根据日志里的404资源路径(比如Assets/js)筛选出对应的记录,就能看到触发请求的页面:- Apache示例命令:
grep "Assets/js" /var/log/apache2/access.log | grep "404" - Nginx示例命令:
grep "Assets/js" /var/log/nginx/access.log | grep "404"
输出结果里的
Referer值就是你要找的触发页面。- Apache示例命令:
临时添加全局请求记录
在项目入口文件index.php里加入一段代码,记录所有请求的路径和来源:$request_uri = $_SERVER['REQUEST_URI']; $referrer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '无来源'; error_log("请求路径: $request_uri | 来源: $referrer", 3, APPPATH.'logs/referer_logs.log');运行一段时间后,打开
application/logs/referer_logs.log,就能找到对应404资源的触发页面。
内容的提问来源于stack exchange,提问作者Bhushan Patil
相关产品推荐
相关产品推荐

