Recettes
Politique de sécurité du contenu
Si votre site utilise la politique de sécurité du contenu, vous devrez ajouter 'nonce-<value>'
et
'strict-dynamic'
à script-src
pour que Tracy fonctionne correctement. Certains plugins tiers peuvent
nécessiter des directives supplémentaires. Le nonce n'est pas pris en charge par la directive style-src
. Si vous
utilisez cette directive, vous devez ajouter 'unsafe-inline'
, mais cela doit être évité en mode production.
Exemple de configuration pour Nette Framework:
http:
csp:
script-src: [nonce, strict-dynamic]
Exemple en pur PHP :
$nonce = base64_encode(random_bytes(20));
header("Content-Security-Policy: script-src 'nonce-$nonce' 'strict-dynamic';");
Chargement plus rapide
L'intégration de base est simple, mais si vous avez des scripts qui bloquent lentement dans la page Web, ils peuvent ralentir
le chargement de Tracy. La solution consiste à placer <?php Tracy\Debugger::renderLoader() ?>
dans votre
modèle avant tout script :
<!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>
Débogage des requêtes AJAX
Tracy capture automatiquement les requêtes AJAX effectuées à l'aide de jQuery ou de l'API native fetch
. Ces
requêtes sont affichées sous forme de lignes supplémentaires dans la barre de Tracy, ce qui permet un débogage AJAX facile et
pratique.
Si vous ne souhaitez pas capturer automatiquement les requêtes AJAX, vous pouvez désactiver cette fonctionnalité en définissant la variable JavaScript :
window.TracyAutoRefresh = false;
Pour surveiller manuellement des requêtes AJAX spécifiques, ajoutez l'en-tête HTTP X-Tracy-Ajax
avec la valeur
renvoyée par Tracy.getAjaxHeader()
. Voici un exemple d'utilisation avec la fonction fetch
:
fetch(url, {
headers: {
'X-Requested-With': 'XMLHttpRequest',
'X-Tracy-Ajax': Tracy.getAjaxHeader(),
}
})
Cette approche permet un débogage sélectif des requêtes AJAX.
Stockage des données
Tracy peut afficher des panneaux de barre Tracy et des écrans bleus pour les requêtes AJAX et les redirections. Tracy crée
ses propres sessions, stocke les données dans ses propres fichiers temporaires et utilise un cookie
tracy-session
.
Tracy peut également être configuré pour utiliser une session PHP native, qui est lancée avant que Tracy ne soit activé :
session_start();
Debugger::setSessionStorage(new Tracy\NativeSession);
Debugger::enable();
Dans le cas où le démarrage d'une session nécessite une initialisation plus complexe, vous pouvez démarrer Tracy
immédiatement (afin qu'il puisse gérer les éventuelles erreurs qui se produisent), puis initialiser le gestionnaire de session
et enfin informer Tracy que la session est prête à être utilisée en utilisant la fonction dispatch()
:
Debugger::setSessionStorage(new Tracy\NativeSession);
Debugger::enable();
// suivi de l'initialisation de la session
// et démarrer la session
session_start();
Debugger::dispatch();
La fonction setSessionStorage()
existe depuis la version 2.9, avant cela Tracy utilisait toujours la session PHP
native.
Épurateur personnalisé
Scrubber est un filtre qui empêche les données sensibles de s'échapper des vidages, comme les mots de passe ou les
informations d'identification. Le filtre est appelé pour chaque élément du tableau ou de l'objet vidés et renvoie
true
si la valeur est sensible. Dans ce cas, *****
est imprimé à la place de la valeur.
// évite de vider les valeurs des clés et les propriétés telles que `password`,
// `password_repeat`, `check_password`, `DATABASE_PASSWORD`, etc.
$scrubber = function(string $key, $value, ?string $class): bool
{
return preg_match('#password#i', $key) && $value !== null;
};
// Nous l'utilisons pour tous les dumps dans BlueScreen.
Tracy\Debugger::getBlueScreen()->scrubber = $scrubber;
Logger personnalisé
Nous pouvons créer un enregistreur personnalisé pour consigner les erreurs, les exceptions non corrigées et être également
appelé par Tracy\Debugger::log()
. Logger implémente l'interface Tracy\ILogger.
use Tracy\ILogger;
class SlackLogger implements ILogger
{
public function log($value, $priority = ILogger::INFO)
{
// envoie une demande à Slack
}
}
Et ensuite nous l'activons :
Tracy\Debugger::setLogger(new SlackLogger);
Si nous utilisons le Nette Framework complet, nous pouvons le définir dans le fichier de configuration de NEON :
services:
tracy.logger: SlackLogger
Intégration Monolog
Le paquet Tracy fournit un adaptateur PSR-3, permettant l'intégration de 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'); // écrit: [<TIMESTAMP>] canal principal.INFO: info [] []
Debugger::log('warning', Debugger::WARNING); // écrit: [<TIMESTAMP>] canal principal.WARNING: avertissement [] []
nginx
Si Tracy ne fonctionne pas sur nginx, il est probablement mal configuré. S'il y a quelque chose comme
try_files $uri $uri/ /index.php;
changez-le en
try_files $uri $uri/ /index.php$is_args$args;