ich auf einem Symfony 2 Web-App arbeitete, und ich mag einen Monolog-Logger mit einem bestimmten Kanal zu einem Dienst injizieren:Symfony 2: an Dienstleistungen Logger für bestimmten Kanal/Handler Injizieren
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 }
Der Service:
class SomeService {
protected $logger;
public function __construct($logger) {
$this->logger = $logger;
$this->logger->info('Log this!');
}
Die prod.log Datei:
[2016.03.28 11.25.47] alert.INFO: Melden Sie diese!
Das Problem: Obwohl ich speziell den Logger injiziert unter Verwendung des alert
Kanal, wobei die Nachricht durch den main
Handler gehandhabt wird. Daher werden die Nachrichten in der prod.log
-Datei statt der prod.alert.log
-Datei protokolliert. Wenn ich die Zeile channels: [!alert]
als Kommentar verlasse, wird die Nachricht unter prod.log
protokolliert. Wenn ich diese Zeile durch das Entfernen des Kommentars aktiviere, wird die Nachricht überhaupt nicht protokolliert (Main-Handler ignoriert den Kanal korrekt).
Was muss ich tun, um einen bestimmten Handler zu verwenden, um eine bestimmte Protokolldatei, Mailer, etc? Meldungen an den Kanal alert
sollten vom Handler alert
verarbeitet werden, während alle anderen Handler ignoriert werden.