2016-03-28 11 views
4

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.

Antwort

2

Verwenden spezieller Service für Monolog Handler erstellt:

services: 
    some_service: 
     class: Namespace\Some\Service 
     arguments: ["@monolog.logger.alert"] 
Verwandte Themen