Все ошибки, которые меня интересуют в отладке в лог-файлах 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
лучший способ сделать это? Возвращает огромное количество данных.Вот код, который вы может адаптироваться к вашим потребностям (я рекомендую создать 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");
}
Других решений пока нет …