Немного прокачал приложние логи

1

Добавил вывод строк с ошибками. Производится поиск по паттерну "in ... on line ..." и добавляет строку в которой найдена ошибка + пару соседних строк чтобы был какой-то контекст для удобства восприятия.

Добавляем несколько методов в wa-apps\logs\lib\classes\logsHelper.class.php:

    private static function getFileSource($file, $line_number, $padding = 2)
    {
        if (!$file || !is_readable($file)) {
            return false;
        }
        $file = fopen($file, 'r');
        $line = 0;
        $range = array(
            'start' => $line_number - $padding,
            'end' => $line_number + $padding
        );
        $format = '% ' . strlen($range['end']) . 'd';
        $source = '';
        while (($row = fgets($file)) !== false) {
            if (++$line > $range['end']) {
                break;
            }
            if ($line >= $range['start']) {
                // $row = htmlspecialchars($row, ENT_NOQUOTES);
                $source .= sprintf($format, $line) . ' ' . $row;
            }
        }
        fclose($file);
        return $source;
    }
    
    public static function addFileSourceCallback(array $matches = array())
    {
        return sprintf("in %s on line %s:\n\n%s", $matches[1], $matches[2], self::getFileSource($matches[1], $matches[2]));
    }
    
    private static function addFileSource($contents)
    {
        $root = $_SERVER['DOCUMENT_ROOT'];
        if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
            $root = str_replace('/', '\\\\', $root);
        }
        $root = str_replace('.', '\.', $root);
        
        return preg_replace_callback(
            '#in (' . $root . '[^\s]+) on line ([0-9]+)#mu',
            'self::addFileSourceCallback',
            $contents
        );
    }

и изменяем метод getFile:

        if (ifset($contents)) {
            $contents = self::addFileSource($contents);
        }
        
        return array(
            'contents'   => $contents,
            'page_count' => $page_count,
            'path'       => $params['path'],
            'return_url' => strpos($back_url, $logs_backend_url) === false ? $logs_backend_url : $back_url,
            'error'      => ifset($error, ''),
            'first_line' => ifset($first_line),
            'last_line'  => ifset($last_line),
        );


0 комментариев

    Добавить комментарий

    Чтобы добавить комментарий, зарегистрируйтесь или войдите