Útmutatók

Content Security Policy

Ha a webhelye Content Security Policy-t használ, hozzá kell adnia ugyanazt a 'nonce-<value>'-t és 'strict-dynamic'-ot a script-src-hez, hogy a Tracy megfelelően működjön. Néhány harmadik féltől származó kiegészítő további beállításokat igényelhet. A Nonce nem támogatott a style-src direktívában, ha ezt a direktívát használja, hozzá kell adnia az 'unsafe-inline'-t, de éles/produkciós módban ezt kerülnie kell.

Konfigurációs példa a Nette Frameworkhöz:

http:
	csp:
		script-src: [nonce, strict-dynamic]

Példa tiszta PHP-ban:

$nonce = base64_encode(random_bytes(20));
header("Content-Security-Policy: script-src 'nonce-$nonce' 'strict-dynamic';");

Gyorsabb betöltés

Az indítás egyenes, de ha a weboldalán lassan betöltődő blokkoló szkriptek vannak, azok lassíthatják a Tracy betöltését. A megoldás az, hogy helyezze el a <?php Tracy\Debugger::renderLoader() ?> kódot a sablonjában minden szkript elé:

<!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 kérések debuggolása

A Tracy automatikusan elkapja a jQuery vagy a natív fetch API segítségével létrehozott AJAX kéréseket. A kérések a Tracy sávban további sorokként jelennek meg, ami lehetővé teszi az AJAX könnyű és kényelmes debuggolását.

Ha nem szeretné automatikusan elkapni az AJAX kéréseket, letilthatja ezt a funkciót egy JavaScript változó beállításával:

window.TracyAutoRefresh = false;

Specifikus AJAX kérések kézi monitorozásához adjon hozzá egy X-Tracy-Ajax HTTP fejlécet a Tracy.getAjaxHeader() által visszaadott értékkel. Itt egy példa a fetch függvénnyel való használatra:

fetch(url, {
    headers: {
        'X-Requested-With': 'XMLHttpRequest',
        'X-Tracy-Ajax': Tracy.getAjaxHeader(),
    }
})

Ez a megközelítés lehetővé teszi az AJAX kérések szelektív debuggolását.

Adattároló

A Tracy képes paneleket megjeleníteni a Tracy bárban és Bluescreeneket AJAX kérésekhez és átirányításokhoz. A Tracy saját sessiont hoz létre, az adatokat saját ideiglenes fájlokban tárolja, és a tracy-session sütit használja.

A Tracy úgy is konfigurálható, hogy a natív PHP sessiont használja, amelyet még a Tracy bekapcsolása előtt elindítunk:

session_start();
Debugger::setSessionStorage(new Tracy\NativeSession);
Debugger::enable();

Abban az esetben, ha a session indítása bonyolultabb inicializálást igényel, a Tracy-t azonnal elindíthatja (hogy feldolgozhassa az esetlegesen keletkezett hibákat), majd inicializálhatja a munkamenet kezelőt, és végül tájékoztathatja a Tracy-t, hogy a munkamenet használatra kész a dispatch() függvény segítségével:

Debugger::setSessionStorage(new Tracy\NativeSession);
Debugger::enable();

// következik a session inicializálása
// és a session indítása
session_start();

Debugger::dispatch();

A setSessionStorage() függvény a 2.9-es verzió óta létezik, korábban a Tracy mindig a natív PHP sessiont használta.

Egyéni scrubber

A Scrubber egy szűrő, amely megakadályozza az érzékeny adatok, például jelszavak vagy hozzáférési adatok kiszivárgását a dumpolás során. A szűrő minden dumpolt tömb vagy objektum elemre meghívódik, és true-t ad vissza, ha az érték érzékeny. Ebben az esetben az érték helyett ***** íródik ki.

// megakadályozza a `password`, `password_repeat`, `check_password`,
// `DATABASE_PASSWORD`, stb. kulcsok és property-k értékeinek kiírását
$scrubber = function(string $key, $value, ?string $class): bool
{
	return preg_match('#password#i', $key) && $value !== null;
};

// használjuk minden dumpra a BlueScreenen belül
Tracy\Debugger::getBlueScreen()->scrubber = $scrubber;

Egyéni logger

Létrehozhatunk saját loggert, amely naplózza a hibákat, az el nem kapott kivételeket, és amelyet a Tracy\Debugger::log() metódus is meghív. A logger implementálja az Tracy\ILogger interfészt.

use Tracy\ILogger;

class SlackLogger implements ILogger
{
	public function log($value, $priority = ILogger::INFO)
	{
		// kérést küld a Slack-re
	}
}

Majd aktiváljuk:

Tracy\Debugger::setLogger(new SlackLogger);

Ha a teljes Nette Frameworköt használjuk, beállíthatjuk a NEON konfigurációs fájlban:

services:
	tracy.logger: SlackLogger

Monolog integráció

A Tracy csomag egy PSR-3 adaptert biztosít, amely lehetővé teszi a monolog/monolog integrációját.

$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

Ha nem működik a Tracy az nginx szerveren, valószínűleg rosszul van konfigurálva. Ha a konfigurációban valami ilyesmi van:

try_files $uri $uri/ /index.php;

változtassa erre:

try_files $uri $uri/ /index.php$is_args$args;