Navodila
Content Security Policy
Če vaše spletno mesto uporablja Content Security Policy, boste morali dodati enaka 'nonce-<value>'
in
'strict-dynamic'
v script-src
, da bo Tracy pravilno delovala. Nekateri dodatki tretjih oseb lahko
zahtevajo dodatne nastavitve. Nonce ni podprt v direktivi style-src
, če uporabljate to direktivo, morate dodati
'unsafe-inline'
, vendar se temu v produkcijskem načinu izogibajte.
Primer konfiguracije za Nette Framework:
http:
csp:
script-src: [nonce, strict-dynamic]
Primer v čistem PHP:
$nonce = base64_encode(random_bytes(20));
header("Content-Security-Policy: script-src 'nonce-$nonce' 'strict-dynamic';");
Hitrejše nalaganje
Zagon je preprost, vendar če imate na spletni strani počasi nalagajoče se blokirajoče skripte, lahko upočasnijo nalaganje
Tracy. Rešitev je, da postavite <?php Tracy\Debugger::renderLoader() ?>
v vašo predlogo pred vse
skripte:
<!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>
Razhroščevanje zahtev AJAX
Tracy samodejno zajema zahteve AJAX, ustvarjene s pomočjo jQuery ali izvornega API-ja fetch
. Zahteve so
v vrstici Tracy prikazane kot dodatne vrstice, kar omogoča enostavno in udobno razhroščevanje AJAX.
Če ne želite samodejno zajemati zahtev AJAX, lahko to funkcijo onemogočite z nastavitvijo spremenljivke JavaScript:
window.TracyAutoRefresh = false;
Za ročno spremljanje specifičnih zahtev AJAX dodajte glavo HTTP X-Tracy-Ajax
z vrednostjo, ki jo vrne
Tracy.getAjaxHeader()
. Tukaj je primer uporabe s funkcijo fetch
:
fetch(url, {
headers: {
'X-Requested-With': 'XMLHttpRequest',
'X-Tracy-Ajax': Tracy.getAjaxHeader(),
}
})
Ta pristop omogoča selektivno razhroščevanje zahtev AJAX.
Shranjevanje podatkov
Tracy zna prikazati panele v Tracy Baru in modre zaslone (Bluescreens) za zahteve AJAX in preusmeritve. Tracy ustvarja lastno
sejo, podatke shranjuje v lastne začasne datoteke in uporablja piškotek tracy-session
.
Tracy lahko konfigurirate tudi tako, da uporablja izvorno sejo PHP, ki jo zaženete še pred vklopom Tracy:
session_start();
Debugger::setSessionStorage(new Tracy\NativeSession);
Debugger::enable();
V primeru, da zagon seje zahteva bolj zapleteno inicializacijo, lahko Tracy zaženete takoj (da lahko obdela morebitne nastale
napake), nato inicializirate upravljalca seje in na koncu obvestite Tracy, da je seja pripravljena za uporabo s funkcijo
dispatch()
:
Debugger::setSessionStorage(new Tracy\NativeSession);
Debugger::enable();
// sledi inicializacija seje
// in zagon seje
session_start();
Debugger::dispatch();
Funkcija setSessionStorage()
obstaja od različice 2.9, pred tem je Tracy vedno uporabljala izvorno sejo PHP.
Lastni Scrubber
Scrubber je filter, ki preprečuje uhajanje občutljivih podatkov pri izpisovanju (dumping), kot so gesla ali poverilnice.
Filter se kliče za vsak element izpisanega polja ali objekta in vrne true
, če je vrednost občutljiva. V tem
primeru se namesto vrednosti izpiše *****
.
// prepreči izpis vrednosti ključev in lastnosti, kot so `password`,
// `password_repeat`, `check_password`, `DATABASE_PASSWORD` itd.
$scrubber = function(string $key, $value, ?string $class): bool
{
return preg_match('#password#i', $key) && $value !== null;
};
// uporabimo ga za vse izpise znotraj BlueScreen
Tracy\Debugger::getBlueScreen()->scrubber = $scrubber;
Lastni Logger
Lahko ustvarite lasten logger, ki bo beležil napake, neujete izjeme in bo prav tako klican z metodo
Tracy\Debugger::log()
. Logger implementira vmesnik Tracy\ILogger.
use Tracy\ILogger;
class SlackLogger implements ILogger
{
public function log($value, $priority = ILogger::INFO)
{
// pošlje zahtevo na Slack
}
}
In nato ga aktivirate:
Tracy\Debugger::setLogger(new SlackLogger);
Če uporabljate celoten Nette Framework, ga lahko nastavite v konfiguracijski datoteki NEON:
services:
tracy.logger: SlackLogger
Integracija Monologa
Paket Tracy ponuja adapter PSR-3, ki omogoča integracijo 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'); // zapiše: [<TIMESTAMP>] main-channel.INFO: info [] []
Debugger::log('warning', Debugger::WARNING); // zapiše: [<TIMESTAMP>] main-channel.WARNING: warning [] []
Nginx
Če vam Tracy ne deluje na strežniku Nginx, je verjetno napačno konfiguriran. Če je v konfiguraciji nekaj takega:
try_files $uri $uri/ /index.php;
spremenite to v:
try_files $uri $uri/ /index.php$is_args$args;