Пользовательский монолог-обработчик для монолога по умолчанию в Symfony 2

Я хочу добавить пользовательский обработчик к монологу по умолчанию в Symfony 2.

В моем файле config.yaml у меня есть:

monolog:
    handlers:
        main:
            type:  stream
            path:  %kernel.logs_dir%/%kernel.environment%.log
            level: debug
        myHandler:
            type:  Acme\MyBundle\Monolog\MyCustomHandler
            level: error

Мой класс выглядит следующим образом:

// Acme\MyBundle\Monolog\MyCustomHandler
use Monolog\Logger;
use Monolog\Handler\SocketHandler;
use Monolog\Formatter\LineFormatter;

class MyCustomHandler extends AbstractProcessingHandler
{
    ...
}

Но даже до заполнения моего класса я получаю сообщение об ошибке:

недействительный тип обработчика "acme\mybundle\monolog\mycustomhandler" для обработчика "myHandler"

Как добавить пользовательский обработчик к монологу по умолчанию, не создавая новую службу монологи?

Ответы

Ответ 1

Попробуйте следующее:

monolog:
    handlers:
        main:
            type:  stream
            path:  %kernel.logs_dir%/%kernel.environment%.log
            level: debug
        custom:
            type: service
            id: my_custom_handler

services:
    my_custom_handler:
        class: Acme\MyBundle\Monolog\MyCustomHandler

Если вы хотите использовать его как обработчик по умолчанию, тогда вы должны изменить бит монолога, который я написал выше.

monolog:
    handlers:
        main:
            type:  stream
            path:  %kernel.logs_dir%/%kernel.environment%.log
            level: debug
            handler: custom
        custom:
            type: service
            id: my_custom_handler

Надеюсь, это поможет вам.

Ответ 2

Я только узнал, что Monolog поставляется с набором различных обработчиков, поэтому вы можете использовать один из них вместо того, чтобы писать свои собственные. Я использую LogEntriesHandler для входа в logentries.com, но есть еще несколько, как описано здесь: https://github.com/Seldaek/monolog#log-specific-servers-and-networked-logging

Конфигурация My Symfony2 для этого выглядит следующим образом:

monolog:
    main:
        type:  fingers_crossed
        level: debug
        handler: nested
    custom:
        type: service
        id: monolog.handler.logentries
        level: error

services:
    monolog.handler.logentries:
        class: Monolog\Handler\LogEntriesHandler
        arguments:
            token: %logentries_token%