代码点火器如何使用钩子获取数据库错误并保存在日志表中?



我需要将所有PHP和数据库错误保存在codeigniter的日志表中。为此,我正在尝试使用代码点火器中的钩子来做到这一点。这是我的代码。

钩子.php

$hook['post_controller'] = array(    
'class' => 'Db_log',            
'function' => 'logQueries',    
'filename' => 'db_log.php',    
'filepath' => '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(( 函数,您会发现每次发生数据库错误时,整个应用程序都会立即停止。

但是,您可以尝试注册一个关闭函数并尝试在那里处理一些东西。

另一种方法是扩展数据库驱动程序 - 为此,您必须扩展加载程序。

相关内容

  • 没有找到相关文章

最新更新