我对在Codeigniter的日志文件中调试感兴趣的所有错误都报告它们来自/system/core/Loader.php
。例如,这是一行:
ERROR | 2014-09-22 22:35:43 | "Severity: Notice --> Undefined variable: my_variable \/system\/core\/Loader.php(829) : eval()'d code 84"
我知道这是来自哪个文件,这是一个观点。我知道debug_backtrace并且我正在考虑创建一个字符串并将其连接到被覆盖的$msg
中的Log.php
变量的末尾,但我首先想要检查与你所有朋友的两件事:
debug_backtrace
是最好的方法吗?它返回大量数据。答案 0 :(得分:0)
以下是您可以根据需要调整的一些代码(我建议创建一个My_Log而不是编辑系统文件,以防CI确实得到更新)。我有这个的原因很复杂,不再有用,但它可能会给你一个开始:
protected function log_query ($query, $type)
{
$backtrace = debug_backtrace ();
$backtrace = array_slice ( $backtrace, 2, -2 ); // first and last two elements are things that never change
$traced = array ();
foreach ( $backtrace as $bt )
{
$func = isset ( $bt['function'] ) ? $bt['function'].'()' : '';
$line = isset ( $bt['line'] ) ? $bt['line'] : '';
$file = isset ( $bt['file'] ) ? str_replace ( APP, '', $bt['file'] ) : '';
$object = isset ( $bt['object'] ) ? get_class ( $bt['object'] ) : '';
$args = array (); build_args ( $bt['args'], $args );
$args = implode ( '; ', $args );
if ( $object )
{
$obj_func = $object . '->' . $func;
} else {
$obj_func = $func;
}
$traced[] = "$file $obj_func $line $args";
unset($args);
}
$traced = implode ( "\n\t", $traced );
$date = MYSQL_DATE_TIME;
$uri = isset ( $_SERVER['REQUEST_URI'] ) ? $_SERVER['REQUEST_URI'] : '' ;
$query= preg_replace ( "/[\n\t]/", ' ', $query );
log_message ('error', "{$query}\n\n\t{$date} ({$type})\n\t{$uri}\n\t{$traced}\n--------------------------\n");
}