symfony / monolog-bundle

Symfony Monolog Bundle
symfony.com
MIT License
2.9k stars 232 forks source link

Bubble: false property doesn't work with doctrine channel like expected #457

Closed bobahvas closed 1 year ago

bobahvas commented 1 year ago

I tried to use the following config to get only DEBUG level of doctrine logs.

query:
    type: stream
    path: "%kernel.logs_dir%/query.log"
    level: debug
    bubble: false
    channels: ["doctrine"]
    formatter: 'monolog.formatter.json'

So, I expected to see in the log something like:

{"message":"Executing query: SELECT ...","context":{"sql":"SELECT ..."},"level":100,"level_name":"DEBUG","channel":"doctrine","datetime":"2023-04-23T13:04:42.861552+00:00","extra":{}}

However, I see the following (info - higher level included as well):

{"message":"Connecting with parameters...","context":{}},"level":200,"level_name":"INFO","channel":"doctrine","datetime":"2023-04-23T13:04:42.840105+00:00","extra":{}}
{"message":"Executing query: SELECT ...","context":{"sql":"SELECT ..."},"level":100,"level_name":"DEBUG","channel":"doctrine","datetime":"2023-04-23T13:04:42.861552+00:00","extra":{}}
{"message":"Disconnecting","context":{},"level":200,"level_name":"INFO","channel":"doctrine","datetime":"2023-04-23T13:04:42.876087+00:00","extra":{}}

Bubble: false property works well when I use the following config for the app category:

info_log:
    type: stream
    path: "%kernel.logs_dir%/info.log"
    level: info
    bubble: false
    channels: ["app"]
    formatter: 'monolog.formatter.json'
debug_log:
    type: stream
    path: "%kernel.logs_dir%/debug.log"
    level: debug
    bubble: false
    channels: ["app"]
    formatter: 'monolog.formatter.json'
bobahvas commented 1 year ago

Sorry for the open issue, logging works another way.

You have to use filters for other handlers. For example, you collect all logs with level "debug" (can be set min and max levels as well) and from channel "doctrine". After that, you provide filtered results to your "query" handler.

filter_for_query:
    type: filter
    accepted_levels: [debug]
    channels: ["doctrine"]
    handler: query

query:
    type: stream
    path: "%kernel.logs_dir%/query.log"
    formatter: 'monolog.formatter.json'

I suggest improving the documentation and maybe adding a current example with an explanation.