Ръководства
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 и 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
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'); // записва: [<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;