Ответ 1
MonologBundle записывает все, используя одни и те же обработчики для всей структуры. Это означает, что если одному из ваших сервисов необходимо подключиться к различным обработчикам, вы должны создать свой собственный Logger/Handler и ввести его в свою службу.
Это может быть пример config (в 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
, чтобы исключить некоторые из них и включить все остальное.