Руководства
Content Security Policy
Если ваш сайт использует Content Security Policy, вам нужно будет добавить те же
'nonce-<value>'
и 'strict-dynamic'
в script-src
, чтобы Tracy работала
правильно. Некоторые сторонние дополнения могут требовать
дополнительных настроек. Nonce не поддерживается в директиве
style-src
, если вы используете эту директиву, вы должны добавить
'unsafe-inline'
, но в production-режиме этого следует избегать.
Пример конфигурации для Nette Framework:
http:
csp:
script-src: [nonce, strict-dynamic]
Пример на чистом PHP:
$nonce = base64_encode(random_bytes(20));
header("Content-Security-Policy: script-src 'nonce-$nonce' 'strict-dynamic';");
Более быстрая загрузка
Запуск прост, однако, если у вас на веб-странице есть медленно
загружающиеся блокирующие скрипты, они могут замедлить загрузку Tracy.
Решение – поместить <?php Tracy\Debugger::renderLoader() ?>
в ваш шаблон
перед всеми скриптами:
<!DOCTYPE html>
<html>
<head>
<title>...<title>
<?php Tracy\Debugger::renderLoader() ?>
<link rel="stylesheet" href="assets/style.css">
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
</head>
Отладка AJAX-запросов
Tracy автоматически перехватывает AJAX-запросы, созданные с помощью jQuery
или нативного API fetch
. Запросы отображаются в панели Tracy как
дополнительные строки, что позволяет легко и удобно отлаживать AJAX.
Если вы не хотите автоматически перехватывать AJAX-запросы, вы можете отключить эту функцию, установив переменную JavaScript:
window.TracyAutoRefresh = false;
Для ручного мониторинга конкретных AJAX-запросов добавьте
HTTP-заголовок X-Tracy-Ajax
со значением, которое вернет
Tracy.getAjaxHeader()
. Вот пример использования с функцией fetch
:
fetch(url, {
headers: {
'X-Requested-With': 'XMLHttpRequest',
'X-Tracy-Ajax': Tracy.getAjaxHeader(),
}
})
Этот подход позволяет выборочно отлаживать AJAX-запросы.
Хранилище данных
Tracy умеет отобразить панели в Tracy Bar и Bluescreen для AJAX-запросов и
перенаправлений. Tracy создает собственную сессию, данные хранит в
собственных временных файлах и использует cookie tracy-session
.
Tracy также можно настроить так, чтобы она использовала нативную PHP-сессию, которую мы запускаем еще до включения Tracy:
session_start();
Debugger::setSessionStorage(new Tracy\NativeSession);
Debugger::enable();
В случае, если запуск сессии требует более сложной инициализации, вы
можете запустить Tracy немедленно (чтобы она могла обработать возможные
возникшие ошибки), а затем инициализировать обработчик сессии и,
наконец, сообщить Tracy, что сессия готова к использованию, с помощью
функции dispatch()
:
Debugger::setSessionStorage(new Tracy\NativeSession);
Debugger::enable();
// следует инициализация сессии
// и запуск сессии
session_start();
Debugger::dispatch();
Функция setSessionStorage()
существует с версии 2.9, до этого Tracy всегда
использовала нативную PHP-сессию.
Собственный scrubber
Scrubber – это фильтр, который предотвращает утечку конфиденциальных
данных при дампинге, таких как пароли или учетные данные. Фильтр
вызывается для каждого элемента дампируемого массива или объекта и
возвращает true
, если значение является конфиденциальным. В таком
случае вместо значения выводится *****
.
// предотвратит вывод значений ключей и свойств, таких как `password`,
// `password_repeat`, `check_password`, `DATABASE_PASSWORD` и т.п.
$scrubber = function(string $key, $value, ?string $class): bool
{
return preg_match('#password#i', $key) && $value !== null;
};
// мы используем его для всех дампов внутри BlueScreen
Tracy\Debugger::getBlueScreen()->scrubber = $scrubber;
Собственный логгер
Мы можем создать собственный логгер, который будет логировать
ошибки, неперехваченные исключения, а также будет вызван методом
Tracy\Debugger::log()
. Логгер реализует интерфейс Tracy\ILogger.
use Tracy\ILogger;
class SlackLogger implements ILogger
{
public function log($value, $priority = ILogger::INFO)
{
// отправит запрос в Slack
}
}
И затем активируем его:
Tracy\Debugger::setLogger(new SlackLogger);
Если мы используем полный Nette Framework, вы можете установить его в конфигурационном файле NEON:
services:
tracy.logger: SlackLogger
Интеграция Monolog
Пакет Tracy предоставляет адаптер PSR-3, который позволяет интегрировать monolog/monolog.
$monolog = new Monolog\Logger('main-channel');
$monolog->pushHandler(new Monolog\Handler\StreamHandler($logFilePath, Monolog\Logger::DEBUG));
$tracyLogger = new Tracy\Bridges\Psr\PsrToTracyLoggerAdapter($monolog);
Debugger::setLogger($tracyLogger);
Debugger::enable();
Debugger::log('info'); // writes: [<TIMESTAMP>] main-channel.INFO: info [] []
Debugger::log('warning', Debugger::WARNING); // writes: [<TIMESTAMP>] main-channel.WARNING: warning [] []
nginx
Если у вас не работает Tracy на сервере nginx, скорее всего, он неправильно настроен. Если в конфигурации есть что-то вроде:
try_files $uri $uri/ /index.php;
измените это на:
try_files $uri $uri/ /index.php$is_args$args;