Ръководства

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;