Простой логгер для отладки PHP-скриптов

Материал из Lblss.ru
Перейти к: навигация, поиск

Как бы особо и не надо, да чтоб в другой раз не писать заново, сохраню здесь.

С выводом в файл

// Функция выдачи в лог отметок времени
$time_to_log_ip = '88.77.66.55'; // Фильтрация по IP
$time_to_log_start = 0;
if($_SERVER['REMOTE_ADDR'] == $time_to_log_ip) {
    $time_to_log_file = fopen($_SERVER['DOCUMENT_ROOT'] . '/ttl.log', 'w'); // Имя файла лога
    fwrite($time_to_log_file, "<pre>\n");
}
function time_to_log($msg) {
    global $time_to_log_file, $time_to_log_start, $time_to_log_ip;
    if($_SERVER['REMOTE_ADDR'] != $time_to_log_ip) return;
    $current_time = microtime(true);
    if(!$time_to_log_start) $time_to_log_start = $current_time;
    fwrite($time_to_log_file, round($current_time - $time_to_log_start, 3) . "\t" . $msg . "\n");
    return;
}
time_to_log(__FILE__.__LINE__);
// end of Функция выдачи в лог отметок времени

Далее в интересующие места кода втыкаем строчку time_to_log(__FILE__.__LINE__);. При необходимости можно вписать своё сообщение. __FILE__.__LINE__ - это ещё нужно для того, чтоб потом не искать, куда навтыкали контрольные точки.

С выводом на страницу

Другой вариант, с использованием статичной переменной в классе и выводом результата непосредственно на страницу.

class a {
    // Класс поддерживает установку меток времени в процессе выполнения кода и вывод меток
    // с указанием времени выполнения фрагментов кода между соседними метками.
    // Примеры обращения:
    // a::m(__FILE__.__LINE__); // установка метки
    // a::m('Контрольная точка 127'); // установка метки
    // a::p(); // печать результата
    protected static $a;
    public static function m($s = '') {
        if(!is_array(self::$a)) {
            self::$a = array();
        }
        self::$a[] = array('t' => microtime(true), 's' => $s);
    }
    public static function p() {
        echo "<pre>\n==========================\n";
        $t0 = $td = $tp = null;
        foreach(self::$a as $i=>$e) {
            if(!isset($t0)) $t0 = (double) $e['t'];
            if(!isset($tp)) $tp = (double) $e['t'];
            $tm = (double) $e['t'] - $t0;
            $ts = number_format($tm, 4);
            $td = number_format((double) $e['t'] - $tp, 4);
            $tp = (double) $e['t'];
            echo "{$ts}\t{$td}\t{$e['s']}\n";
        }
        echo "==========================\n</pre>";
    }
}

Обновлено 28 декабря 2017г.

Персональные инструменты