Anleitungen
Content Security Policy
Wenn Ihre Website Content Security Policy verwendet, müssen Sie dieselbe 'nonce-<value>'
und
'strict-dynamic'
zu script-src
hinzufügen, damit Tracy ordnungsgemäß funktioniert. Einige Add-ons von
Drittanbietern erfordern möglicherweise zusätzliche Einstellungen. Nonce wird in der style-src
-Direktive nicht
unterstützt. Wenn Sie diese Direktive verwenden, müssen Sie 'unsafe-inline'
hinzufügen, sollten dies jedoch im
Produktionsmodus vermeiden.
Konfigurationsbeispiel für das Nette Framework:
http:
csp:
script-src: [nonce, strict-dynamic]
Beispiel in reinem PHP:
$nonce = base64_encode(random_bytes(20));
header("Content-Security-Policy: script-src 'nonce-$nonce' 'strict-dynamic';");
Schnelleres Laden
Der Start ist einfach, aber wenn Sie langsam ladende, blockierende Skripte auf Ihrer Webseite haben, können diese das Laden
von Tracy verlangsamen. Die Lösung besteht darin, <?php Tracy\Debugger::renderLoader() ?>
in Ihr Template vor
allen Skripten zu platzieren:
<!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>
Debugging von AJAX-Anfragen
Tracy fängt automatisch AJAX-Anfragen ab, die mit jQuery oder der nativen fetch
-API erstellt wurden. Anfragen
werden in der Tracy-Leiste als zusätzliche Zeilen angezeigt, was ein einfaches und bequemes AJAX-Debugging ermöglicht.
Wenn Sie AJAX-Anfragen nicht automatisch abfangen möchten, können Sie diese Funktion durch Setzen einer JavaScript-Variable deaktivieren:
window.TracyAutoRefresh = false;
Für die manuelle Überwachung spezifischer AJAX-Anfragen fügen Sie den HTTP-Header X-Tracy-Ajax
mit dem Wert
hinzu, den Tracy.getAjaxHeader()
zurückgibt. Hier ist ein Beispiel für die Verwendung mit der
fetch
-Funktion:
fetch(url, {
headers: {
'X-Requested-With': 'XMLHttpRequest',
'X-Tracy-Ajax': Tracy.getAjaxHeader(),
}
})
Dieser Ansatz ermöglicht ein selektives Debugging von AJAX-Anfragen.
Datenspeicher
Tracy kann Panels in der Tracy Bar und Bluescreens für AJAX-Anfragen und Weiterleitungen anzeigen. Tracy erstellt eine eigene
Session, speichert Daten in eigenen temporären Dateien und verwendet das Cookie tracy-session
.
Tracy kann auch so konfiguriert werden, dass es die native PHP-Session verwendet, die wir noch vor dem Einschalten von Tracy starten:
session_start();
Debugger::setSessionStorage(new Tracy\NativeSession);
Debugger::enable();
Falls das Starten der Session eine komplexere Initialisierung erfordert, können Sie Tracy sofort starten (damit es eventuell
auftretende Fehler verarbeiten kann), dann den Session-Handler initialisieren und schließlich Tracy über die Funktion
dispatch()
informieren, dass die Session einsatzbereit ist:
Debugger::setSessionStorage(new Tracy\NativeSession);
Debugger::enable();
// hier folgt die Session-Initialisierung
// und der Start der Session
session_start();
Debugger::dispatch();
Die Funktion setSessionStorage()
existiert seit Version 2.9, davor hat Tracy immer die native PHP-Session
verwendet.
Eigener Scrubber
Ein Scrubber ist ein Filter, der das Durchsickern sensibler Daten beim Dumping verhindert, wie z. B. Passwörter oder
Zugangsdaten. Der Filter wird für jedes Element des gedumpten Arrays oder Objekts aufgerufen und gibt true
zurück,
wenn der Wert sensibel ist. In diesem Fall wird anstelle des Wertes *****
ausgegeben.
// verhindert die Ausgabe von Werten von Schlüsseln und Eigenschaften wie `password`,
// `password_repeat`, `check_password`, `DATABASE_PASSWORD`, usw.
$scrubber = function(string $key, $value, ?string $class): bool
{
return preg_match('#password#i', $key) && $value !== null;
};
// wir verwenden ihn für alle Dumps innerhalb des BlueScreen
Tracy\Debugger::getBlueScreen()->scrubber = $scrubber;
Eigener Logger
Wir können einen eigenen Logger erstellen, der Fehler und nicht abgefangene Ausnahmen protokolliert und auch von der Methode
Tracy\Debugger::log()
aufgerufen wird. Der Logger implementiert das Interface Tracy\ILogger.
use Tracy\ILogger;
class SlackLogger implements ILogger
{
public function log($value, $priority = ILogger::INFO)
{
// sendet eine Anfrage an Slack
}
}
Und aktivieren ihn anschließend:
Tracy\Debugger::setLogger(new SlackLogger);
Wenn wir das vollständige Nette Framework verwenden, können Sie es in der NEON-Konfigurationsdatei einstellen:
services:
tracy.logger: SlackLogger
Monolog-Integration
Das Tracy-Paket bietet einen PSR-3-Adapter, der die Integration von monolog/monolog ermöglicht.
$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'); // schreibt: [<TIMESTAMP>] main-channel.INFO: info [] []
Debugger::log('warning', Debugger::WARNING); // schreibt: [<TIMESTAMP>] main-channel.WARNING: warning [] []
nginx
Wenn Tracy auf einem Nginx-Server nicht funktioniert, ist er wahrscheinlich falsch konfiguriert. Wenn in der Konfiguration etwas wie folgt steht:
try_files $uri $uri/ /index.php;
ändern Sie es in:
try_files $uri $uri/ /index.php$is_args$args;