MonologBundle регистрирует все, используя одни и те же обработчики для всей платформы. Это означает, что если одна из ваших служб должна регистрироваться в разных обработчиках, вы должны создать свой собственный Logger / Handler и добавить его в свою службу.
Это может быть пример конфигурации (в yaml):
services:
my_logger:
class: Symfony\Bridge\Monolog\Logger
arguments: [soap]
calls:
- [pushHandler, [@my_handler]]
my_handler:
class: Monolog\Handler\StreamHandler
# 200 = INFO, see Monolog::Logger for the values of log levels
arguments: [%kernel.root_dir%/%kernel.environment%.soap.log, 200]
soap_service:
class: Your\Soap\Client
arguments: [@my_logger]
Надеюсь, это проясняет это.
Обновление: Начиная с Symfony 2.1, вы также можете настроить, какие каналы будут получать какие обработчики, чтобы вы могли альтернативно сделать что-то вроде этого:
services:
soap_service:
class: Your\Soap\Client
arguments: [@logger]
tags:
- { name: monolog.logger, channel: soap }
, который создает новый мыльный канал (т.е. экземпляр журнала, получающий все обработчики), а затем настраивает различные обработчики для этого канала:
monolog:
handlers:
main:
type: stream
path: %kernel.root_dir%/%kernel.environment%.log
level: error
channels: [!soap]
soap:
type: stream
path: %kernel.root_dir%/%kernel.environment%.soap.log
level: info
channels: [soap]
Это означает, что главный обработчик будет получать все, кроме мыльного канала, а мыльный обработчик будет получать только мыльный канал. Вы также можете удалить ключ channels
в главном обработчике, если вы хотите, чтобы в вашем главном файле журнала было все, но в то же время имелась копия только журналов мыла отдельно. Это обеспечивает большую гибкость, и, как вы видите, каналы представляют собой массив, так что вы можете перечислить нужные каналы или использовать черный список !name
, чтобы исключить некоторые и включить все остальное.