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;