php - Codeigniter 如何使用钩子获取数据库错误并保存在日志表中?
问题描述
我需要将所有 PHP 和数据库错误保存在 codeigniter 的日志表中。为此,我正在尝试使用 codeigniter 中的钩子来做到这一点。这是我的代码。
钩子.php
$hook['post_controller'] = array(
'class' => 'Db_log',
'function' => 'logQueries',
'filename' => 'db_log.php',
'filepath' => 'hooks'
);
Codeigniter 如何使用钩子获取数据库错误并保存在日志表中
我在 hooks 目录中创建了文件 db_log.php。这是我的代码。
<?php
class Db_log {
function __construct() {
}
function logQueries() {
$CI = & get_instance();
$times = $CI->db->query_times;
$error = $CI->db->error();
print_r($error);
// foreach ($CI->db->queries as $key => $query)
// {
// $sql = $query . " \n Execution Time:" . $times[$key];
// }
}
}
它正在显示所有查询,但在与数据库相关的任何错误时不起作用。我也尝试过 $CI->db->error() 来获取错误,但它不起作用。如果有任何与数据库相关的错误并且需要在自定义日志表中保存一个条目,我需要显示自定义消息。
尝试使用 shutdown_function
public function setHandler() {
register_shutdown_function('handleShutdown');
}
}
function handleShutdown() {
print_r(error_get_last());
if (($error = error_get_last())) {
die("nnnnnnnnnnnnn");
ob_start();
echo "<pre>";
var_dump($error);
echo "</pre>";
$message = ob_get_clean();
//sendEmail($message);
ob_start();
echo '{"status":"error","message":"Internal application error!"}';
ob_flush();
exit();
}
}
hooks.php
$hook['pre_system'][] = array(
'class' => 'PHPFatalError',
'function' => 'setHandler',
'filename' => 'PHPFatalError.php',
'filepath' => 'hooks'
);
解决方案
我认为这是不可能的 - 这是 CI < 4 的缺陷之一
问题出在他们的数据库驱动程序类中——如果您查看他们的display_error()函数,您会看到每次发生数据库错误时,整个应用程序都会立即停止。
但是,您可以尝试注册一个关闭功能并尝试在那里处理一些事情。
另一种方法是扩展 DB 驱动程序 - 为此您必须扩展加载程序。
推荐阅读
- python - 使用来自两个不同字典和返回键的值进行计算
- ios - SwiftUI hasChanges 总是返回 true
- c# - Bin 大小与傅里叶变换输出数组中的条目数有何关系
- linker - Where is the documentation of c lang env variables?
- latex - 如何解决 TikZ 上的这个标签定位问题?
- c - 我正在尝试使用 Glade 在 GTK+ 上做一个项目,但是当我编译我的代码并运行可执行文件时,我遇到了一些错误
- excel - git中excel文件的版本控制
- deep-learning - 测试时为什么一定要使用DataParallel?
- asp.net-mvc - 如何提交值,但从输入字段 ASP.NET Core MVC 接收密钥
- python - 使用数据框 python 更新 excel 工作表中的部分数据