SymfonyWorld Online 2021 Winter Edition December 9 – 10, 2021 100% Online 25 talks and 10 workshops

New in Symfony 5.4: Configurable Exceptions

Symfony 5.4 is backed by Private Packagist. Private Packagist is a fast, reliable, and secure Composer repository for your private packages. It mirrors all your open-source dependencies for better availability and monitors them for security vulnerabilities.

Contributed by
Grégoire Pineau
in #42244.

In Symfony applications, logging is available either via Symfony's built-in logger and or via the Monolog logger and its tight integration with Symfony. When using Monolog you can access to features such as excluding certain HTTP codes from logs and logging messages to different files.

In Symfony 5.4 we've improved the logger with a new feature to make exceptions configurable per class. Using the new framework.exceptions option you can now define the log level and the HTTP status of the exceptions associated to a certain class:

1
2
3
4
5
6
7
8
9
# config/packages/framework.yaml
framework:
    exceptions:
        Symfony\Component\HttpKernel\Exception\BadRequestHttpException:
            log_level: debug
            status_code: 422
        App\Something\Exception\SomeException:
            log_level: alert
            status_code: 503

Although this example uses the YAML config format, this feature is also available when using XML or PHP as the config format.

Help the Symfony project!

As with any Open-Source project, contributing code or documentation is the most common way to help, but we also have a wide range of sponsoring opportunities.

Comments

Could you add XML and PHP examples for the sake of completeness?
@Christian you can see XML and PHP examples as part of the tests of the Pull Request related to this feature. Click on the "#42244" number below Grégoire's name.
So in the example, an uncaught "SomeException" triggered from a request would respond with a 503? Is there any way to set the response body for these exceptions?

For example, I throw a "FrontendException" for errors that should be reported in an API response. I have an onKernelException listener that will translate those exception messages set the response to that message with some additional info, with status code 400.

Is there any way to replicate that sort of behavior with this system?
I hope this comment inspires someone to add `log_channel` directive as well :}
Login with SymfonyConnect to post a comment