Monolog: log different channels and multiple handlers to grouped log file + dedicated log files Monolog: log different channels and multiple handlers to grouped log file + dedicated log files symfony symfony

Monolog: log different channels and multiple handlers to grouped log file + dedicated log files


Channels in monolog works exactly like you want. Sample monolog configuration

app/config.ymlmonolog:  channels: ['deletion']  handlers:    main:        type:         fingers_crossed        action_level: error        handler:      grouped_main        formatter: "monolog.formatter.request"        buffer_size: 30#        if you will set stop_buffering: true - you will get ALL events after first error. It could produce huge logs for console        stop_buffering: false#   this is for getsentry.com error catching    sentry:        type:  raven        dsn:   '%sentry_url%'        level: notice    # Groups    grouped_main:        type:    group        members: [sentry, streamed_main, streamed_main_brief]    # Streams    streamed_main:        type:  stream        path:  "%kernel.logs_dir%/%kernel.environment%.log"    streamed_main_brief:        type:  stream        path:  "%kernel.logs_dir%/%kernel.environment%_brief.log"        formatter: monolog.brief_formatter    console:        type: console        formatter: monolog.console_formatter    deletion:         # log deletion related messages        level:    debug        type:     stream        path:     '%kernel.logs_dir%/deletion.log'        channels: ['deletion']        formatter: monolog.brief_formatterservices:    my_service:        class: Monolog\Processor\IntrospectionProcessor        tags:            - { name: monolog.processor }    monolog.console_formatter:        class: Symfony\Bridge\Monolog\Formatter\ConsoleFormatter        arguments:            - "<fg=black;bg=green>[%%datetime%%]</fg=black;bg=green> %%start_tag%%%%message%%%%end_tag%%\n"    monolog.brief_formatter:        class: Monolog\Formatter\LineFormatter        arguments:            - "[%%datetime%%] %%message%%\n"#            default format is#            - "[%datetime%] %channel%.%level_name%: %message% %context% %extra%\n"        

If you will add code like

$this->getContainer()->get("logger")->info("Sample info");$this->getContainer()->get("monolog.logger.deletion")->info("Deletion channel info");$this->getContainer()->get("monolog.logger.deletion")->error("Deletion channel error");$this->getContainer()->get("monolog.logger.deletion")->info("Deletion channel info #2");

You will get 3 log files with such a content

Channel log file

deletion.log[2016-11-11 12:43:18] Deletion channel info[2016-11-11 12:43:18] Deletion channel error[2016-11-11 12:43:19] Deletion channel info #2

Default env log file

dev.log[2016-11-11 12:43:18] event.DEBUG: Notified event "console.command" to listener "Symfony\Component\HttpKernel\EventListener\DebugHandlersListener::configure". [] {"file":"...."}[2016-11-11 12:43:18] event.DEBUG: Notified event "console.command" to listener "Symfony\Bridge\Monolog\Handler\ConsoleHandler::onCommand". [] {"file":"...."}[2016-11-11 12:43:18] app.INFO: Sample info [] {"file":"..."}[2016-11-11 12:43:18] deletion.INFO: Deletion channel info [] {"file":"...."}[2016-11-11 12:43:18] deletion.ERROR: Deletion channel error [] {"...."}

Brief env.log

[2016-11-11 12:43:18] Notified event "console.command" to listener "Symfony\Component\HttpKernel\EventListener\DebugHandlersListener::configure".[2016-11-11 12:43:18] Notified event "console.command" to listener "Symfony\Bridge\Monolog\Handler\ConsoleHandler::onCommand".[2016-11-11 12:43:18] Sample info[2016-11-11 12:43:18] Deletion channel info[2016-11-11 12:43:18] Deletion channel error

Also notice, that because of stop_buffering: false notice after error will not appear at dev.log, dev_brief.log, but will appear at deletion.log

And you should try sentry - its great product and his owners are cool guys :)