Receitas
Política de Segurança de Conteúdo
Se seu site utiliza a Política de Segurança de Conteúdo, você precisará acrescentar 'nonce-<value>'
e
'strict-dynamic'
a script-src
para que Tracy funcione corretamente. Alguns 3º plugins podem exigir
diretrizes adicionais. Nonce não é suportado na diretiva style-src
, se você usar esta diretiva você precisa
adicionar 'unsafe-inline'
, mas isto deve ser evitado no modo de produção.
Exemplo de configuração para Nette Framework:
http:
csp:
script-src: [nonce, strict-dynamic]
Exemplo em PHP puro:
$nonce = base64_encode(random_bytes(20));
header("Content-Security-Policy: script-src 'nonce-$nonce' 'strict-dynamic';");
Carregamento mais rápido
A integração básica é simples, porém se você tiver scripts de bloqueio lentos na página web, eles podem retardar
o carregamento do Tracy. A solução é colocar <?php Tracy\Debugger::renderLoader() ?>
em seu modelo antes
de qualquer roteiro:
<!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>
Depuração de solicitações AJAX
O Tracy captura automaticamente as solicitações AJAX feitas com jQuery ou com a API nativa fetch
. Essas
solicitações são exibidas como linhas adicionais na barra do Tracy, permitindo uma depuração AJAX fácil e conveniente.
Se não quiser capturar automaticamente as solicitações AJAX, você poderá desativar esse recurso definindo a variável JavaScript:
window.TracyAutoRefresh = false;
Para o monitoramento manual de solicitações AJAX específicas, adicione o cabeçalho HTTP X-Tracy-Ajax
com
o valor retornado por Tracy.getAjaxHeader()
. Aqui está um exemplo de uso com a função fetch
:
fetch(url, {
headers: {
'X-Requested-With': 'XMLHttpRequest',
'X-Tracy-Ajax': Tracy.getAjaxHeader(),
}
})
Essa abordagem permite a depuração seletiva de solicitações AJAX.
Armazenamento de dados
O Tracy pode exibir painéis de barras Tracy e Bluescreens para solicitações e redirecionamentos AJAX. O Tracy cria suas
próprias sessões, armazena dados em seus próprios arquivos temporários e usa um cookie tracy-session
.
Tracy também pode ser configurado para usar uma sessão PHP nativa, que é iniciada antes de Tracy ser ligado:
session_start();
Debugger::setSessionStorage(new Tracy\NativeSession);
Debugger::enable();
Caso o início de uma sessão requeira uma inicialização mais complexa, você pode iniciar Tracy imediatamente (para que ele
possa lidar com quaisquer erros que ocorram) e então inicializar o manipulador da sessão e finalmente informar Tracy que a
sessão está pronta para ser usada usando a função dispatch()
:
Debugger::setSessionStorage(new Tracy\NativeSession);
Debugger::enable();
// seguido pela inicialização da sessão
// e iniciar a sessão
session_start();
Debugger::dispatch();
A função setSessionStorage()
existe desde a versão 2.9, antes disso Tracy sempre usou a sessão PHP
nativa.
Scrubber personalizado
O Scrubber é um filtro que evita que dados sensíveis vazem de lixões, tais como senhas ou credenciais. O filtro é chamado
para cada item da matriz ou objeto despejado e retorna true
se o valor for sensível. Neste caso, *****
é impresso ao invés do valor.
// evita o despejo de valores e propriedades chave como "palavras-chave",
// Palavras_senhas_repetição', 'verificar_senhas', 'DATABASE_PASSWORD', etc.
$scrubber = function(string $key, $value, ?string $class): bool
{
return preg_match('#password#i', $key) && $value !== null;
};
// nós o utilizamos para todas as lixeiras dentro da BlueScreen
Tracy\Debugger::getBlueScreen()->scrubber = $scrubber;
Registrador personalizado
Podemos criar um registrador personalizado para registrar erros, exceções inigualáveis, e também ser chamado por
Tracy\Debugger::log()
. O logger implementa a interface Tracy\ILogger.
use Tracy\ILogger;
class SlackLogger implements ILogger
{
public function log($value, $priority = ILogger::INFO)
{
// envia um pedido para Slack
}
}
E então o ativamos:
Tracy\Debugger::setLogger(new SlackLogger);
Se utilizarmos toda a estrutura Nette, podemos configurá-la no arquivo de configuração NEON:
services:
tracy.logger: SlackLogger
Integração do Monolog
O pacote Tracy fornece um adaptador PSR-3, permitindo a integração 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'); // escreve: [<TIMESTAMP>] main-channel.INFO: info [] [] []
Debugger::log('warning', Debugger::WARNING); // escreve: [<TIMESTAMP>] main-channel.WARNING: warning [] [] []
nginx
Se Tracy não trabalha com nginx, provavelmente está mal configurado. Se houver algo como
try_files $uri $uri/ /index.php;
mudá-lo para
try_files $uri $uri/ /index.php$is_args$args;