vasek-purchart/tracy-blue-screen-bundle

This bundle lets you use the Tracy's debug screen in combination with the the default profiler in your Symfony application.


README

This bundle lets you use the Tracy's debug screen in combination with the the default profiler in your Symfony application.

Why is Tracy's debug screen better than the Symfony default exception screen:

  • You can browse all values of function call arguments.
  • All information about the current request and environment.
  • You can view all the information which is contained by the exception (e.g. private properties).
  • Configurable links to files in stacktrace which can open directly in the IDE.
  • Fullscreen layout providing more space for information.
  • Look at the interactive example screen.

However the Symfony profiler provides a lot of useful information about the application when an error occurs, so it is better to have them both available:

Nette Tracy with Symfony profiler screenshot

Console integration

To provide the same comfort while using Symfony Console this bundle will save a rendered BlueScreen to a file and show you a link for it. If you configure it, it will open the exception directly in your browser.

Link to generated BlueScreen in Console

Usage

If you do not have any custom kernel.exception listeners this works out of the box. However if you have any, you have to ensure that they do not return any response, because that prevents the profiler from showing up (the same applies for the default Symfony exception screen).

If you need to change the default position of this listener (see order in bin/console debug:event-dispatcher), use the configuration option listener_priority.

This bundle expects that you are using the default Symfony profiler screen rendered via the TwigBundle, which must be registered.

Console integration also works out of the box, if you do not have an console.error listener that would prevent execution of this one. Again, this can be tweaked using the respective listener_priority option.

Configure the browser option to open the exceptions directly in your browser, configured binary must be executable with exec().

If you want to configure your application to always convert warnings and notices to exceptions use the debug.error_handler.throw_at parameter (see PHP manual for other available values):

parameters:
    debug.error_handler.throw_at: -1

This bundle does not provide a dedicated logging functionality. If you want to use Tracy for logging e.g. in production use the monolog-tracy-bundle, which provides a Tracy Monolog handler.

Configuration

Configuration structure with listed default values:

# config/packages/tracy_blue_screen.yaml
tracy_blue_screen:
    controller:
        # Enable debug screen for controllers.
        # Enabled by default only in dev environment with debug mode on.
        enabled: ~
        # Priority with which the listener will be registered.
        listener_priority: 0

    console:
        # Enable debug screen for console.
        # Enabled by default only in dev environment with debug mode on.
        enabled: ~

        # Directory, where BlueScreens for console will be stored.
        # If you are already using Tracy for logging, set this to the same.
        # This will be only used, if given Tracy\Logger instance does not have a directory set.
        log_directory: '%kernel.logs_dir%'

        # Configure this to open generated BlueScreen in your browser.
        # Configuration option may be for example 'google-chrome'
        # or 'firefox'and it will be invoked as a shell command.
        browser: null

        # Priority with which the listener will be registered.
        listener_priority: 0

    blue_screen:
        # Add paths which should be collapsed (for external/compiled code) so that actual error is expanded.
        collapse_paths:
            # Defaults:
            - '%kernel.root_dir%/bootstrap.php.cache'
            - '%kernel.cache_dir%'
            # plus paths set in BlueScreen instance used (/vendor)

You can also override services used internally, for example if you need to specify options for the BlueScreen instance, you can provide custom instance with an alias:

services:
    my_blue_screen:
        class: 'Tracy\BlueScreen'
        properties:
            info:
                - 'environment: %kernel.environment%'

    vasek_purchart.tracy_blue_screen.tracy.blue_screen: '@my_blue_screen'

Installation

Install package vasek-purchart/tracy-blue-screen-bundle with Composer:

composer require vasek-purchart/tracy-blue-screen-bundle

Register the bundle in your application:

// config/bundles.php
return [
	// ...
	VasekPurchart\TracyBlueScreenBundle\TracyBlueScreenBundle::class => ['all' => true],
];