Recepti

Politika varnosti vsebine

Če vaše spletno mesto uporablja politiko za varnost vsebine, morate dodati 'nonce-<value>' in 'strict-dynamic' na script-src, da bo Tracy pravilno deloval. Nekateri tretji vtičniki lahko zahtevajo dodatne direktive. Nonce ni podprt v direktivi style-src, če uporabljate to direktivo, morate dodati 'unsafe-inline', vendar se temu v produkcijskem načinu izognite.

Primer konfiguracije za ogrodje Nette:

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

Primer v čistem jeziku PHP:

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

Hitrejše nalaganje

Osnovna integracija je preprosta, vendar če imate na spletni strani skripte za počasno blokiranje, lahko upočasnijo nalaganje Tracyja. Rešitev je, da postavite <?php Tracy\Debugger::renderLoader() ?> v predlogo pred vsemi skriptami:

<!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 zahtevkov AJAX

Tracy samodejno zajame zahteve AJAX, opravljene z uporabo programa jQuery ali izvornega vmesnika API fetch. Ti zahtevki so prikazani kot dodatne vrstice v vrstici Tracy, kar omogoča enostavno in priročno razhroščevanje AJAX.

Če ne želite samodejno zajemati zahtevkov AJAX, lahko to funkcijo onemogočite z nastavitvijo spremenljivke JavaScript:

window.TracyAutoRefresh = false;

Za ročno spremljanje določenih zahtevkov AJAX dodajte glavo HTTP X-Tracy-Ajax z vrednostjo, ki jo vrne funkcija 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 zahtevkov AJAX.

Shranjevanje podatkov

Tracy lahko prikaže Tracy bar plošče in Bluescreens za zahteve AJAX in preusmeritve. Tracy ustvarja lastne seje, shranjuje podatke v lastne začasne datoteke in uporablja piškotek tracy-session.

Tracy je mogoče konfigurirati tudi za uporabo izvorne seje PHP, ki se zažene, preden je Tracy vklopljen:

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

Če je za zagon seje potrebna bolj zapletena inicializacija, lahko Tracy zaženete takoj (tako da lahko obravnava morebitne napake), nato pa inicializirate izvajalca seje in nazadnje obvestite Tracy, da je seja pripravljena za uporabo, s funkcijo dispatch():

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

// ki mu sledi inicializacija seje
// in zaženite sejo.
session_start();

Debugger::dispatch();

Funkcija setSessionStorage() obstaja od različice 2.9, pred tem je Tracy vedno uporabljal izvorno sejo PHP.

Čistilec po meri

Scrubber je filter, ki preprečuje uhajanje občutljivih podatkov, kot so gesla ali poverilnice, iz odlagališč. Filter se pokliče za vsak element izpisanega polja ali predmeta in vrne true, če je vrednost občutljiva. V tem primeru se namesto vrednosti izpiše *****.

// se izogne odmetavanju vrednosti ključev in lastnosti, kot je `password`,
// `password_repeat`, `check_password`, `DATABASE_PASSWORD` itd.
$scrubber = function(string $key, $value, ?string $class): bool
{
	return preg_match('#password#i', $key) && $value !== null;
};

// uporabljamo ga za vsa odlagališča znotraj sistema BlueScreen
Tracy\Debugger::getBlueScreen()->scrubber = $scrubber;

Dnevnik po meri

Ustvarimo lahko dnevnik po meri, ki beleži napake, nezajete izjeme in ga lahko pokliče tudi 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 v storitev Slack
	}
}

Nato ga aktiviramo:

Tracy\Debugger::setLogger(new SlackLogger);

Če uporabljamo celotno ogrodje Nette, ga lahko nastavimo v konfiguracijski datoteki NEON:

services:
	tracy.logger: SlackLogger

Monolog Integracija

Paket Tracy zagotavlja 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: opozorilo [] []

nginx

Če Tracy ne deluje v nginxu, je verjetno napačno konfiguriran. Če je na voljo nekaj takega kot

try_files $uri $uri/ /index.php;

spremenite v

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