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;