Рецепти
Политика за сигурност на съдържанието
Ако сайтът ви използва политика за сигурност на съдържанието, ще
трябва да добавите '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 и Bluescreens за AJAX заявки и пренасочвания.
Tracy създава свои собствени сесии, съхранява данни в свои собствени
временни файлове и използва бисквитка 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 е филтър, който предотвратява изтичането на чувствителни данни
от дъмповете, като например пароли или пълномощни. Филтърът се извиква
за всеки елемент от изхвърления масив или обект и връща 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()
. Logger имплементира интерфейса 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 Integration
Пакетът 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: предупреждение [] []
nginx
Ако Tracy не работи на nginx, вероятно е неправилно конфигуриран. Ако има нещо като
try_files $uri $uri/ /index.php;
да го промените на
try_files $uri $uri/ /index.php$is_args$args;