monolog-bundle icon indicating copy to clipboard operation
monolog-bundle copied to clipboard

non-existent service error when using service handler in one environment, but not another

Open jdevinemt opened this issue 3 years ago • 0 comments

I am using a monolog service handler labeled db in my dev environment, but not in prod. When I try to run the app or a command in the prod environment I receive the error You have requested a non-existent service "monolog.handler.db". The error is resolved when I add the db handler to the prod monolog configuration.

It seems like this might be a bug when building the container where it does not ignore monolog handler services that are used in one environment, but not another.

In my specific case, I will be using the db handler on production, so I can work around this. But it seems like this might not be working as intended.

Here is the configuration that produced the error:

# config/packages/monolog.yaml
monolog:
    channels:
        - deprecation # Deprecations are logged in the dedicated "deprecation" channel when it exists

when@dev:
    monolog:
        handlers:
            db_filter:
                type: filter
                handler: db
                min_level: warning
            db:
                type: service
                id: App\Logging\Handler\DbHandler
            main_file:
                type: stream
                path: "%kernel.logs_dir%/%kernel.environment%.log"
                level: warning
                channels: ["!event"]
            info_filter:
                type: filter
                handler: info_file
                accepted_levels: ['info']
            info_file:
                type: stream
                path: "%kernel.logs_dir%/%kernel.environment%.info.log"
                channels: ['!event']
            debug_filter:
                type: filter
                handler: debug_file
                accepted_levels: ['debug']
            debug_file:
                type: stream
                path: "%kernel.logs_dir%/%kernel.environment%.debug.log"
                channels: ['!event']
            console:
                type: console
                process_psr_3_messages: false
                channels: ["!event", "!doctrine", "!console"]

when@prod:
    monolog:
        handlers:
            main:
                type: fingers_crossed
                action_level: error
                handler: nested
                excluded_http_codes: [404, 405]
                buffer_size: 50 # How many messages should be saved? Prevent memory leaks
            nested:
                type: stream
                path: php://stderr
                level: debug
                formatter: monolog.formatter.json
            console:
                type: console
                process_psr_3_messages: false
                channels: ["!event", "!doctrine"]
            deprecation:
                type: stream
                channels: [deprecation]
                path: php://stderr

Here is the exception:

AH01071: Got error 'PHP message: PHP Fatal error:  Uncaught Symfony\\Component\\DependencyInjection\\Exception\\ServiceNotFoundException: You have requested a non-existent service "monolog.handler.db". in /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php:996
Stack trace:
#0 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1028): Symfony\\Component\\DependencyInjection\\ContainerBuilder->getDefinition()
#1 /var/www/html/vendor/symfony/monolog-bundle/DependencyInjection/Compiler/AddProcessorsPass.php(39): Symfony\\Component\\DependencyInjection\\ContainerBuilder->findDefinition()
#2 /var/www/html/vendor/symfony/dependency-injection/Compiler/Compiler.php(82): Symfony\\Bundle\\MonologBundle\\DependencyInjection\\Compiler\\AddProcessorsPass->process()
#3 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(757): Symfony\\Component\\DependencyInjection\\Compiler\\Compiler->compile()
#4 /var/www/html/vendor/symfony/http-ker...

jdevinemt avatar Mar 04 '22 19:03 jdevinemt