Інструкції
Content Security Policy
Якщо ваш веб-сайт використовує Content Security Policy, вам потрібно буде додати
ті самі 'nonce-<value>'
та 'strict-dynamic'
до script-src
, щоб Tracy
працювала належним чином. Деякі доповнення сторонніх розробників
можуть вимагати додаткових налаштувань. Nonce не підтримується в
директиві style-src
, якщо ви використовуєте цю директиву, вам
потрібно додати 'unsafe-inline'
, але в робочому режимі цього слід
уникати.
Приклад конфігурації для 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.
Власний скрабер
Скрабер — це фільтр, який запобігає витоку конфіденційних даних під
час дампінгу, таких як паролі або облікові дані. Фільтр викликається
для кожного елемента дампованого масиву або об'єкта і повертає
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'); // записує: [<TIMESTAMP>] main-channel.INFO: info [] []
Debugger::log('warning', Debugger::WARNING); // записує: [<TIMESTAMP>] main-channel.WARNING: warning [] []
nginx
Якщо Tracy не працює на сервері nginx, ймовірно, він неправильно налаштований. Якщо в конфігурації є щось подібне:
try_files $uri $uri/ /index.php;
змініть це на:
try_files $uri $uri/ /index.php$is_args$args;