ガイド

Content Security Policy

あなたのウェブサイトがContent Security Policyを使用している場合、Tracyが正しく機能するように、同じ 'nonce-<value>''strict-dynamic'script-src に追加する必要があります。一部のサードパーティ製アドオンは追加の設定が必要になる場合があります。 Nonceは style-src ディレクティブではサポートされていません。このディレクティブを使用している場合、'unsafe-inline' を追加する必要がありますが、本番モードではこれを避けるべきです。

Nette Frameworkの設定例:

http:
	csp:
		script-src: [nonce, strict-dynamic]

純粋なPHPでの例:

$nonce = base64_encode(random_bytes(20));
header("Content-Security-Policy: script-src 'nonce-$nonce' 'strict-dynamic';");

より高速な読み込み

起動は簡単ですが、ウェブページ上に読み込みが遅いブロッキングスクリプトがある場合、Tracyの読み込みを遅くする可能性があります。 解決策は、<?php Tracy\Debugger::renderLoader() ?> をあなたのテンプレートのすべてのスクリプトの前に配置することです:

<!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リクエストのデバッグ

Tracyは、jQueryまたはネイティブAPI fetch を使用して作成されたAJAXリクエストを自動的にキャッチします。リクエストはTracyバーに追加の行として表示され、これによりAJAXのデバッグが簡単かつ便利になります。

AJAXリクエストを自動的にキャッチしたくない場合、JavaScript変数を設定することでこの機能を無効にできます:

window.TracyAutoRefresh = false;

特定のAJAXリクエストを手動で監視するには、HTTPヘッダー X-Tracy-AjaxTracy.getAjaxHeader() が返す値で追加してください。ここに fetch 関数を使用した例を示します:

fetch(url, {
    headers: {
        'X-Requested-With': 'XMLHttpRequest',
        'X-Tracy-Ajax': Tracy.getAjaxHeader(),
    }
})

このアプローチにより、AJAXリクエストの選択的なデバッグが可能になります。

データストレージ

TracyはTracyバーにパネルを表示でき、そしてAJAXリクエストやリダイレクト用のBluescreenも表示できます。Tracyは独自のセッションを作成し、データは独自の一時ファイルに保存し、そして tracy-session クッキーを使用します。

Tracyは、Tracyを有効にする前に開始するネイティブPHPセッションを使用するように設定することもできます:

session_start();
Debugger::setSessionStorage(new Tracy\NativeSession);
Debugger::enable();

セッションの開始がより複雑な初期化を要求する場合、Tracyをすぐに起動できます(発生する可能性のあるエラーを処理できるように)。そしてその後、セッションハンドラを初期化し、そして最後にTracyにセッションが使用準備完了であることを dispatch() 関数を使用して通知します:

Debugger::setSessionStorage(new Tracy\NativeSession);
Debugger::enable();

// セッションの初期化が続く
// そしてセッションの開始
session_start();

Debugger::dispatch();

setSessionStorage() 関数はバージョン2.9から存在します。それ以前は、Tracyは常にネイティブPHPセッションを使用していました。

カスタムスクラバー

スクラバーは、ダンプ時にパスワードやアクセス認証情報などの機密データの漏洩を防ぐフィルタです。フィルタはダンプされた配列またはオブジェクトの各要素に対して呼び出され、値が機密である場合に true を返します。その場合、値の代わりに ***** が出力されます。

// `password`、`password_repeat`、`check_password`、`DATABASE_PASSWORD` などのキーやプロパティの値の出力を防ぎます

$scrubber = function(string $key, $value, ?string $class): bool
{
	return preg_match('#password#i', $key) && $value !== null;
};

// BlueScreen内のすべてのダンプに使用します
Tracy\Debugger::getBlueScreen()->scrubber = $scrubber;

カスタムロガー

エラー、キャッチされなかった例外をログに記録し、そして Tracy\Debugger::log() メソッドによっても呼び出される独自のロガーを作成できます。ロガーは Tracy\ILogger インターフェースを実装します。

use Tracy\ILogger;

class SlackLogger implements ILogger
{
	public function log($value, $priority = ILogger::INFO)
	{
		// Slackにリクエストを送信します
	}
}

そしてその後、それを有効化します:

Tracy\Debugger::setLogger(new SlackLogger);

完全なNette Frameworkを使用している場合、NEON設定ファイルで設定できます:

services:
	tracy.logger: SlackLogger

Monologの統合

Tracyパッケージは、monolog/monolog の統合を可能にするPSR-3アダプタを提供します。

$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'); // writes: [<TIMESTAMP>] main-channel.INFO: info [] []
Debugger::log('warning', Debugger::WARNING); // writes: [<TIMESTAMP>] main-channel.WARNING: warning [] []

nginx

nginxサーバーでTracyが機能しない場合、おそらく設定が間違っています。設定に次のようなものがある場合:

try_files $uri $uri/ /index.php;

それを次のように変更してください:

try_files $uri $uri/ /index.php$is_args$args;