Receptek

Tartalombiztonsági politika

Ha webhelye a Tartalombiztonsági házirendet használja, hozzá kell adnia a következőket 'nonce-<value>' és a 'strict-dynamic' címet a script-src címhez, hogy a Tracy megfelelően működjön. Néhány 3. bővítmény további direktívákat igényelhet. A nonce nem támogatott a style-src direktívában, ha ezt a direktívát használja, akkor hozzá kell adnia a 'unsafe-inline', de ezt termelési üzemmódban kerülni kell.

Konfigurációs példa a Nette keretrendszerhez:

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

Példa tiszta PHP nyelven:

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

Gyorsabb betöltés

Az alapvető integráció egyszerű, azonban ha lassú blokkoló szkriptek vannak a weboldalon, akkor ezek lelassíthatják a Tracy betöltését. A megoldás az, hogy a <?php Tracy\Debugger::renderLoader() ?> a sablonba a szkriptek előtt:

<!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érelmek hibakeresése

A Tracy automatikusan rögzíti a jQuery vagy a natív fetch API segítségével végrehajtott AJAX-kéréseket. Ezek a kérések további sorokként jelennek meg a Tracy sávban, lehetővé téve az egyszerű és kényelmes AJAX hibakeresést.

Ha nem szeretné automatikusan rögzíteni az AJAX-kéréseket, akkor a JavaScript változó beállításával kikapcsolhatja ezt a funkciót:

window.TracyAutoRefresh = false;

A konkrét AJAX-kérések kézi megfigyeléséhez adja hozzá a X-Tracy-Ajax HTTP-fejlécet a Tracy.getAjaxHeader() által visszaadott értékkel. Íme egy példa a fetch függvénnyel való használatára:

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 hibakeresését.

Adattárolás

A Tracy képes megjeleníteni a Tracy bárpaneleket és a Bluescreeneket az AJAX-kérésekhez és átirányításokhoz. A Tracy saját munkameneteket hoz létre, az adatokat saját ideiglenes fájljaiban tárolja, és a tracy-session cookie-t használja.

A Tracy úgy is beállítható, hogy natív PHP munkamenetet használjon, amely a Tracy bekapcsolása előtt indul el:

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

Abban az esetben, ha a munkamenet elindítása bonyolultabb inicializálást igényel, a Tracy-t azonnal elindíthatja (így az esetlegesen felmerülő hibákat kezelni tudja), majd inicializálja a munkamenetkezelőt, végül pedig a dispatch() függvény segítségével tájékoztatja a Tracy-t, hogy a munkamenet készen áll a használatra:

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

// amelyet a munkamenet inicializálása követ
// és a munkamenet elindítása
session_start();

Debugger::dispatch();

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

Egyéni Scrubber

A Scrubber egy olyan szűrő, amely megakadályozza, hogy érzékeny adatok szivárogjanak ki a dumps-okból, például jelszavak vagy hitelesítő adatok. A szűrő a dumpolt tömb vagy objektum minden egyes elemére meghívódik, és a true értéket adja vissza, ha az érték érzékeny. Ebben az esetben az érték helyett a ***** kerül kiírásra.

// elkerüli a kulcsértékek és az olyan tulajdonságok, mint a `password` dömpingjét,
// `password_repeat`, `check_password`, `DATABASE_PASSWORD`, stb.
$scrubber = function(string $key, $value, ?string $class): bool
{
	return preg_match('#password#i', $key) && $value !== null;
};

// ezt használjuk a BlueScreen-en belüli összes dömperhez.
Tracy\Debugger::getBlueScreen()->scrubber = $scrubber;

Egyéni naplózó

Létrehozhatunk egy egyéni naplózót a hibák és a nem fogadott kivételek naplózására, valamint a Tracy\Debugger::log() által történő meghívásra. A logger a Tracy\ILogger interfészt valósítja meg.

use Tracy\ILogger;

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

Ezután aktiváljuk:

Tracy\Debugger::setLogger(new SlackLogger);

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

services:
	tracy.logger: SlackLogger

Monolog integráció

A Tracy csomag egy PSR-3 adaptert biztosít, amely lehetővé teszi a monolog/monolog integrálásá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'); // írja: [<TIMESTAMP>] main-channel.INFO: info [] [] []
Debugger::log('warning', Debugger::WARNING); // writes: [<TIMESTAMP>] main-channel.WARNING: warning [] [] []

nginx

Ha a Tracy nem működik az nginx-en, akkor valószínűleg rosszul van beállítva. Ha van valami ilyesmi, mint

try_files $uri $uri/ /index.php;

változtassa meg

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