Ú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;