Nasıl Yapılır Kılavuzları
İçerik Güvenlik Politikası (Content Security Policy)
Web siteniz İçerik Güvenlik Politikası kullanıyorsa, Tracy'nin düzgün çalışması için script-src
'ye
aynı 'nonce-<value>'
ve 'strict-dynamic'
eklemeniz gerekecektir. Bazı üçüncü taraf
eklentiler ek ayarlar gerektirebilir. Nonce, style-src
yönergesinde desteklenmez; bu yönergeyi kullanıyorsanız
'unsafe-inline'
eklemeniz gerekir, ancak üretim modunda bundan kaçınmalısınız.
Nette Framework için örnek yapılandırma:
http:
csp:
script-src: [nonce, strict-dynamic]
Saf PHP'de örnek:
$nonce = base64_encode(random_bytes(20));
header("Content-Security-Policy: script-src 'nonce-$nonce' 'strict-dynamic';");
Daha Hızlı Yükleme
Başlatma basittir, ancak web sayfanızda yavaş yüklenen engelleyici betikler varsa, Tracy'nin yüklenmesini
yavaşlatabilirler. Çözüm, <?php Tracy\Debugger::renderLoader() ?>
öğesini şablonunuza tüm betiklerden
önce yerleştirmektir:
<!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>
AJAX İsteklerinde Hata Ayıklama
Tracy, jQuery veya yerel fetch
API kullanılarak oluşturulan AJAX isteklerini otomatik olarak yakalar. İstekler,
Tracy çubuğunda ek satırlar olarak görüntülenir, bu da AJAX'ın kolay ve rahat bir şekilde hata ayıklanmasını
sağlar.
AJAX isteklerini otomatik olarak yakalamak istemiyorsanız, JavaScript değişkenini ayarlayarak bu özelliği devre dışı bırakabilirsiniz:
window.TracyAutoRefresh = false;
Belirli AJAX isteklerini manuel olarak izlemek için, Tracy.getAjaxHeader()
tarafından döndürülen değerle
X-Tracy-Ajax
HTTP başlığını ekleyin. İşte fetch
fonksiyonuyla bir kullanım örneği:
fetch(url, {
headers: {
'X-Requested-With': 'XMLHttpRequest',
'X-Tracy-Ajax': Tracy.getAjaxHeader(),
}
})
Bu yaklaşım, AJAX isteklerinin seçici olarak hata ayıklanmasını sağlar.
Veri Depolama
Tracy, AJAX istekleri ve yönlendirmeler için Tracy çubuğunda ve Bluescreen'lerde panelleri görüntüleyebilir. Tracy kendi
oturumunu oluşturur, verileri kendi geçici dosyalarında saklar ve tracy-session
çerezini kullanır.
Tracy, Tracy'yi açmadan önce başlattığımız yerel PHP oturumunu kullanacak şekilde de yapılandırılabilir:
session_start();
Debugger::setSessionStorage(new Tracy\NativeSession);
Debugger::enable();
Oturumun başlatılması daha karmaşık bir başlatma gerektiriyorsa, Tracy'yi hemen başlatabilir (oluşabilecek hataları
işleyebilmesi için), ardından oturum işleyicisini başlatabilir ve son olarak dispatch()
fonksiyonunu kullanarak
oturumun kullanıma hazır olduğunu Tracy'ye bildirebilirsiniz:
Debugger::setSessionStorage(new Tracy\NativeSession);
Debugger::enable();
// oturum başlatma işlemi takip eder
// ve oturumun başlatılması
session_start();
Debugger::dispatch();
setSessionStorage()
fonksiyonu sürüm 2.9'dan beri mevcuttur, daha önce Tracy her zaman yerel PHP oturumunu
kullanıyordu.
Özel Temizleyici (Scrubber)
Scrubber, döküm sırasında parolalar veya erişim kimlik bilgileri gibi hassas verilerin sızmasını önleyen bir
filtredir. Filtre, dökümü yapılan dizinin veya nesnenin her öğesi için çağrılır ve değer hassas ise true
döndürür. Bu durumda, değer yerine *****
yazdırılır.
// `password`, `password_repeat`, `check_password`, `DATABASE_PASSWORD` gibi anahtarların
// ve özelliklerin değerlerinin yazdırılmasını engeller.
$scrubber = function(string $key, $value, ?string $class): bool
{
return preg_match('#password#i', $key) && $value !== null;
};
// BlueScreen içindeki tüm dökümler için kullanacağız
Tracy\Debugger::getBlueScreen()->scrubber = $scrubber;
Özel Logger
Hataları, yakalanmamış istisnaları günlüğe kaydedecek ve ayrıca Tracy\Debugger::log()
metodu tarafından
çağrılacak kendi logger'ımızı oluşturabiliriz. Logger, Tracy\ILogger arayüzünü uygular.
use Tracy\ILogger;
class SlackLogger implements ILogger
{
public function log($value, $priority = ILogger::INFO)
{
// Slack'e istek gönderir
}
}
Ve ardından etkinleştiririz:
Tracy\Debugger::setLogger(new SlackLogger);
Tam Nette Framework kullanıyorsak, bunu yapılandırma NEON dosyasında ayarlayabilirsiniz:
services:
tracy.logger: SlackLogger
Monolog Entegrasyonu
Tracy paketi, monolog/monolog entegrasyonunu sağlayan bir PSR-3 adaptörü sunar.
$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'); // yazar: [<TIMESTAMP>] main-channel.INFO: info [] []
Debugger::log('warning', Debugger::WARNING); // yazar: [<TIMESTAMP>] main-channel.WARNING: warning [] []
nginx
Tracy nginx sunucusunda çalışmıyorsa, muhtemelen yanlış yapılandırılmıştır. Yapılandırmada şöyle bir şey varsa:
try_files $uri $uri/ /index.php;
şuna değiştirin:
try_files $uri $uri/ /index.php$is_args$args;