Skip to content

Conversation

@peter17
Copy link

@peter17 peter17 commented Dec 18, 2025

Q A
License MIT
Packagist sentry/sentry-symfony

Fixes #1907
Please also see getsentry/sentry-symfony#969

I believe this is the correct way to do and it seems to work on my project. A review would be welcome!
I'm not sure this would work with MonologBundle < 4.0. I'm not sure how to target a specific version of MonologBundle...

@symfony-recipes-bot symfony-recipes-bot enabled auto-merge (squash) December 18, 2025 21:37
@github-actions
Copy link

github-actions bot commented Dec 18, 2025

Thanks for the PR 😍

How to test these changes in your application

  1. Define the SYMFONY_ENDPOINT environment variable:

    # On Unix-like (BSD, Linux and macOS)
    export SYMFONY_ENDPOINT=https://raw.githubusercontent.com/symfony/recipes-contrib/flex/pull-1908/index.json
    # On Windows
    SET SYMFONY_ENDPOINT=https://raw.githubusercontent.com/symfony/recipes-contrib/flex/pull-1908/index.json
  2. Install the package(s) related to this recipe:

    composer req symfony/flex
    composer req 'sentry/sentry-symfony:^5.0'
  3. Don't forget to unset the SYMFONY_ENDPOINT environment variable when done:

    # On Unix-like (BSD, Linux and macOS)
    unset SYMFONY_ENDPOINT
    # On Windows
    SET SYMFONY_ENDPOINT=

Diff between recipe versions

In order to help with the review stage, I'm in charge of computing the diff between the various versions of patched recipes.
I'm going keep this comment up to date with any updates of the attached patch.

sentry/sentry-symfony

1.0 vs 3.0
diff --git a/sentry/sentry-symfony/1.0/config/packages/prod/sentry.yaml b/sentry/sentry-symfony/3.0/config/packages/prod/sentry.yaml
index 342036fe..5285a224 100644
--- a/sentry/sentry-symfony/1.0/config/packages/prod/sentry.yaml
+++ b/sentry/sentry-symfony/3.0/config/packages/prod/sentry.yaml
@@ -1,2 +1,31 @@
 sentry:
     dsn: '%env(SENTRY_DSN)%'
+    options:
+        excluded_exceptions:
+            - Symfony\Component\HttpKernel\Exception\NotFoundHttpException
+            - Symfony\Component\Security\Core\Exception\AccessDeniedException
+
+#    If you are using Monolog, you also need this additional configuration to log the errors correctly:
+#    https://docs.sentry.io/platforms/php/guides/symfony/#monolog-integration
+#    register_error_listener: false
+
+# monolog:
+#     handlers:
+#         sentry:
+#             type: sentry
+#             level: !php/const Monolog\Logger::ERROR
+#             hub_id: Sentry\State\HubInterface
+
+# If you are using MonologBundle prior to v3.7, you need to configure the handler as a service instead:
+
+# monolog:
+#     handlers:
+#         sentry:
+#             type: service
+#             id: Sentry\Monolog\Handler
+
+# services:
+#     Sentry\Monolog\Handler:
+#         arguments:
+#             $hub: '@Sentry\State\HubInterface'
+#             $level: !php/const Monolog\Logger::ERROR
diff --git a/sentry/sentry-symfony/1.0/config/packages/sentry.yaml b/sentry/sentry-symfony/1.0/config/packages/sentry.yaml
deleted file mode 100644
index e94da2d6..00000000
--- a/sentry/sentry-symfony/1.0/config/packages/sentry.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
-sentry:
-    options:
-        curl_method: async
-
-#    skip_capture:  # To skip certain exceptions, specify a list below
-#      - 'Symfony\Component\HttpKernel\Exception\NotFoundHttpException'
-#      - 'Symfony\Component\HttpKernel\Exception\BadRequestHttpException'
-#      - 'Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException'
diff --git a/sentry/sentry-symfony/1.0/manifest.json b/sentry/sentry-symfony/3.0/manifest.json
index c96ec90e..097e7e84 100644
--- a/sentry/sentry-symfony/1.0/manifest.json
+++ b/sentry/sentry-symfony/3.0/manifest.json
@@ -1,6 +1,6 @@
 {
     "bundles": {
-        "Sentry\\SentryBundle\\SentryBundle": ["all"]
+        "Sentry\\SentryBundle\\SentryBundle": ["prod"]
     },
     "copy-from-recipe": {
         "config/": "%CONFIG_DIR%/"
3.0 vs 4.0
diff --git a/sentry/sentry-symfony/3.0/config/packages/prod/sentry.yaml b/sentry/sentry-symfony/3.0/config/packages/prod/sentry.yaml
deleted file mode 100644
index 5285a224..00000000
--- a/sentry/sentry-symfony/3.0/config/packages/prod/sentry.yaml
+++ /dev/null
@@ -1,31 +0,0 @@
-sentry:
-    dsn: '%env(SENTRY_DSN)%'
-    options:
-        excluded_exceptions:
-            - Symfony\Component\HttpKernel\Exception\NotFoundHttpException
-            - Symfony\Component\Security\Core\Exception\AccessDeniedException
-
-#    If you are using Monolog, you also need this additional configuration to log the errors correctly:
-#    https://docs.sentry.io/platforms/php/guides/symfony/#monolog-integration
-#    register_error_listener: false
-
-# monolog:
-#     handlers:
-#         sentry:
-#             type: sentry
-#             level: !php/const Monolog\Logger::ERROR
-#             hub_id: Sentry\State\HubInterface
-
-# If you are using MonologBundle prior to v3.7, you need to configure the handler as a service instead:
-
-# monolog:
-#     handlers:
-#         sentry:
-#             type: service
-#             id: Sentry\Monolog\Handler
-
-# services:
-#     Sentry\Monolog\Handler:
-#         arguments:
-#             $hub: '@Sentry\State\HubInterface'
-#             $level: !php/const Monolog\Logger::ERROR
diff --git a/sentry/sentry-symfony/4.0/config/packages/sentry.yaml b/sentry/sentry-symfony/4.0/config/packages/sentry.yaml
new file mode 100644
index 00000000..48635325
--- /dev/null
+++ b/sentry/sentry-symfony/4.0/config/packages/sentry.yaml
@@ -0,0 +1,29 @@
+when@prod:
+    sentry:
+        dsn: '%env(SENTRY_DSN)%'
+
+#        If you are using Monolog, you also need this additional configuration to log the errors correctly:
+#        https://docs.sentry.io/platforms/php/guides/symfony/#monolog-integration
+#        register_error_listener: false
+
+#    monolog:
+#        handlers:
+#            sentry:
+#                type: sentry
+#                level: !php/const Monolog\Logger::ERROR
+#                hub_id: Sentry\State\HubInterface
+
+#    If you are using MonologBundle prior to v3.7, you need to configure the handler as a service instead:
+
+#    monolog:
+#        handlers:
+#            sentry:
+#                type: service
+#                id: Sentry\Monolog\Handler
+
+#    services:
+#        Sentry\Monolog\Handler:
+#            arguments:
+#                $hub: '@Sentry\State\HubInterface'
+#                $level: !php/const Monolog\Logger::ERROR
+#                $bubble: false
diff --git a/sentry/sentry-symfony/3.0/manifest.json b/sentry/sentry-symfony/4.0/manifest.json
index 097e7e84..9e07f9cc 100644
--- a/sentry/sentry-symfony/3.0/manifest.json
+++ b/sentry/sentry-symfony/4.0/manifest.json
@@ -7,5 +7,8 @@
     },
     "env": {
         "SENTRY_DSN": ""
+    },
+    "conflict": {
+        "symfony/framework-bundle": "<5.4"
     }
 }
4.0 vs 4.6
diff --git a/sentry/sentry-symfony/4.0/config/packages/sentry.yaml b/sentry/sentry-symfony/4.6/config/packages/sentry.yaml
index 48635325..9e88fbc5 100644
--- a/sentry/sentry-symfony/4.0/config/packages/sentry.yaml
+++ b/sentry/sentry-symfony/4.6/config/packages/sentry.yaml
@@ -1,10 +1,16 @@
 when@prod:
     sentry:
         dsn: '%env(SENTRY_DSN)%'
+        # this hooks into critical paths of the framework (and vendors) to perform
+        # automatic instrumentation (there might be some performance penalty)
+        # https://docs.sentry.io/platforms/php/guides/symfony/performance/instrumentation/automatic-instrumentation/
+        tracing:
+            enabled: false
 
 #        If you are using Monolog, you also need this additional configuration to log the errors correctly:
 #        https://docs.sentry.io/platforms/php/guides/symfony/#monolog-integration
 #        register_error_listener: false
+#        register_error_handler: false
 
 #    monolog:
 #        handlers:
@@ -12,18 +18,5 @@ when@prod:
 #                type: sentry
 #                level: !php/const Monolog\Logger::ERROR
 #                hub_id: Sentry\State\HubInterface
-
-#    If you are using MonologBundle prior to v3.7, you need to configure the handler as a service instead:
-
-#    monolog:
-#        handlers:
-#            sentry:
-#                type: service
-#                id: Sentry\Monolog\Handler
-
-#    services:
-#        Sentry\Monolog\Handler:
-#            arguments:
-#                $hub: '@Sentry\State\HubInterface'
-#                $level: !php/const Monolog\Logger::ERROR
-#                $bubble: false
+#                fill_extra_context: true # Enables sending monolog context to Sentry
+#                process_psr_3_messages: false # Disables the resolution of PSR-3 placeholders
diff --git a/sentry/sentry-symfony/4.0/manifest.json b/sentry/sentry-symfony/4.6/manifest.json
index 9e07f9cc..9922cfe2 100644
--- a/sentry/sentry-symfony/4.0/manifest.json
+++ b/sentry/sentry-symfony/4.6/manifest.json
@@ -9,6 +9,7 @@
         "SENTRY_DSN": ""
     },
     "conflict": {
-        "symfony/framework-bundle": "<5.4"
+        "symfony/framework-bundle": "<5.4",
+        "symfony/monolog-bundle": "<3.7"
     }
 }
4.6 vs 5.0
diff --git a/sentry/sentry-symfony/4.6/config/packages/sentry.yaml b/sentry/sentry-symfony/5.0/config/packages/sentry.yaml
index 9e88fbc5..44058b72 100644
--- a/sentry/sentry-symfony/4.6/config/packages/sentry.yaml
+++ b/sentry/sentry-symfony/5.0/config/packages/sentry.yaml
@@ -1,22 +1,39 @@
 when@prod:
     sentry:
         dsn: '%env(SENTRY_DSN)%'
-        # this hooks into critical paths of the framework (and vendors) to perform
-        # automatic instrumentation (there might be some performance penalty)
-        # https://docs.sentry.io/platforms/php/guides/symfony/performance/instrumentation/automatic-instrumentation/
-        tracing:
-            enabled: false
-
-#        If you are using Monolog, you also need this additional configuration to log the errors correctly:
-#        https://docs.sentry.io/platforms/php/guides/symfony/#monolog-integration
+        options:
+            # Add request headers, cookies, IP address and the authenticated user
+            # see https://docs.sentry.io/platforms/php/data-management/data-collected/ for more info
+            # send_default_pii: true
+            ignore_exceptions:
+                - 'Symfony\Component\ErrorHandler\Error\FatalError'
+                - 'Symfony\Component\Debug\Exception\FatalErrorException'
+#
+#        # If you are using Monolog, you also need this additional configuration to log the errors correctly:
+#        # https://docs.sentry.io/platforms/php/guides/symfony/#monolog-integration
 #        register_error_listener: false
 #        register_error_handler: false
-
+#
 #    monolog:
 #        handlers:
+#            # Use this only if you don't want to use structured logging and instead receive
+#            # certain log levels as errors.  
 #            sentry:
-#                type: sentry
-#                level: !php/const Monolog\Logger::ERROR
-#                hub_id: Sentry\State\HubInterface
-#                fill_extra_context: true # Enables sending monolog context to Sentry
-#                process_psr_3_messages: false # Disables the resolution of PSR-3 placeholders
+#                type: service
+#                id: Sentry\Monolog\Handler
+#
+#            # Use this for structured log integration
+#            sentry_logs:
+#                type: service
+#                id: Sentry\SentryBundle\Monolog\LogsHandler
+#
+#    # Enable one of the two services below, depending on your choice above
+#    services:
+#        Sentry\Monolog\Handler:
+#            arguments:
+#                $hub: '@Sentry\State\HubInterface'
+#                $level: !php/const Monolog\Logger::ERROR
+#                $fillExtraContext: true # Enables sending monolog context to Sentry
+#        Sentry\SentryBundle\Monolog\LogsHandler:
+#            arguments:
+#                - !php/const Monolog\Logger::INFO

@zyberspace
Copy link

Hi @peter17 ,

first of all, thanks for the PR! This pushed me into the right direction to fix the same problem with my project.

I took a peak into the MonologExtension (the one that registers all the Monolog handlers), and to me it looks like the configuration keys level and include_extra can also be removed, as only the id gets used for handlers of type "service": https://github.com/symfony/monolog-bundle/blob/4.x/src/DependencyInjection/MonologExtension.php#L136-L145

The sentry monolog handler then takes full care of selecting the right level and also deciding if the monolog extra data should be included.

My full patch on a freshly installed sentry config:

             # Use this only if you don't want to use structured logging and instead receive
             # certain log levels as errors.
             sentry:
-                type: sentry
-                level: !php/const Monolog\Logger::ERROR
-                hub_id: Sentry\State\HubInterface
-                fill_extra_context: true # Enables sending monolog context to Sentry
-                process_psr_3_messages: false # Disables the resolution of PSR-3 placeholders
+                type: service
+                id: Sentry\Monolog\Handler
 
 #            # Use this for structured log integration
 #            sentry_logs:
 #                type: service
 #                id: Sentry\SentryBundle\Monolog\LogsHandler
-#
+
+    services:
+        Sentry\Monolog\Handler:
+            arguments:
+                $hub: '@Sentry\State\HubInterface'
+                $level: !php/const Monolog\Logger::ERROR
+                $fillExtraContext: true # Enables sending monolog context to Sentry
+
+#    # If you use the structured log integration
 #    services:
 #        Sentry\SentryBundle\Monolog\LogsHandler:
 #            arguments:

auto-merge was automatically disabled December 23, 2025 21:41

Head branch was pushed to by a user without write access

@symfony-recipes-bot symfony-recipes-bot enabled auto-merge (squash) December 23, 2025 21:42
@peter17
Copy link
Author

peter17 commented Dec 23, 2025

@zyberspace Thanks, I updated the PR accordingly

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Sentry configuration is broken with Symfony 8 / MonologBundle 4

2 participants