я работаю на веб-приложение Symfony 2 и я хотел бы, чтобы ввести регистратор Монолог с использованием определенного канала к услуге:Symfony 2: Инъекция регистратор для конкретного канала/обработчиком услуги
The Config:
monolog:
handlers:
main:
type: stream
path: %kernel.root_dir%/%kernel.environment%.log
level: error
#channels: [!alert]
alert:
type: stream
path: %kernel.root_dir%/%kernel.environment%.alert.log
level: info
channels: [alert]
Service Config:
services:
some_service:
class: Some\Service
arguments: [@logger]
tags:
- { name: monolog.logger, channel: alert }
служба:
class SomeService {
protected $logger;
public function __construct($logger) {
$this->logger = $logger;
$this->logger->info('Log this!');
}
Файл prod.log:
[2016-03-28 11:25:47] alert.INFO: бревенчатый это!
Проблема: Хотя я специально впрыскивать регистратор с использованием alert
канала, сообщение обрабатывается main
обработчика. Таким образом, сообщения записываются в файл prod.log
вместо файла prod.alert.log
.
Когда я оставляю строку channels: [!alert]
в качестве комментария, сообщение регистрируется prod.log
. Когда я активирую эту строку, удаляя комментарий, сообщение не регистрируется вообще (основной обработчик правильно игнорирует канал).
Для чего нужен я, чтобы использовать определенный обработчик для таргетинга на определенный файл журнала, почтовую программу и т. Д.? Сообщения для канала alert
должны обрабатываться обработчиком alert
, а все остальные обработчики игнорируются.