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;