Symfony 2.1 - Schalten Sie den Monolog-Kanal im Controller um

7

Ich möchte mich in eine andere Datei als das übliche dev.log oder prod.log

einloggen

Ich weiß, dass dies mit verschiedenen Kanälen gemacht werden kann, und ich habe es in mehreren Diensten verwendet, aber ich bin mir nicht ganz sicher, ob ich den Monolog-Kanal in einem Controller wechseln soll.

In einem Dienst definieren Sie den Kanal einfach über das Attribut tags in der Servicedefinition, aber wie kann ich dies in einem Controller oder noch besser in einer bestimmten Aktion tun?

Ich weiß, dass eine mögliche Lösung das wäre: Symfony 2: Loggen Sie sich ein eine bestimmte Datei

Aber es scheint übertrieben, zwei neue Dienste nur für die Protokollierung in einer benutzerdefinierten Datei zu definieren.

    
Johannes Klauß 12.04.2013, 08:05
quelle

3 Antworten

24

Die einzige Möglichkeit, dies zu tun, besteht darin, Ihren Controller als Dienst zu definieren und einen zu injizieren benutzerdefinierte Logger mit einem benutzerdefinierten Kanal.

Da die Kanäle automatisch erstellt werden, gibt es derzeit keinen anderen Weg, aber es ist eine interessante Anfrage und du bist nicht die erste, also habe ich ein Problem auf MonologBundle , um die Definition von Kanälen auf der Bündelkonfigurationsebene zu ermöglichen. Auf diese Weise können Sie einfach den richtigen Logger mit $this->get('monolog.logger.mychannel') vom Controller holen (was Sie bereits tun können, wenn der Kanal existiert, aber nicht, wenn Sie einen benutzerdefinierten Kanal für den Controller wünschen, den sonst nichts nutzt).

Aktualisierung:

Ab dem symfony / monolog-bundle 2.4.0 können Sie weitere Kanäle als:

definieren %Vor%

Dann können Sie es als $this->get('monolog.logger.mychannel')

abrufen     
Seldaek 12.04.2013, 08:28
quelle
5

Ich weiß, dass dies ein älterer Post ist, aber ich habe einen ähnlichen Bedarf mit symfony / monolog-bundle 2.1.x. Ich konnte anscheinend nicht genau finden, was ich in anderen Threads benötigte, also dokumentiere ich hier meine Lösung, nämlich einen Logger-Container zu erstellen, der einen benutzerdefinierten Kanal verwendet.

In config.yml

%Vor%

In meinem Paket service.yml

%Vor%

In src / Acme / MyBundle / Monolog / UserActionsLogger.php

%Vor%

Dann können Sie den Logger-Container entweder in einen anderen Dienst injizieren mit:

%Vor%

Oder Sie könnten den Logger-Container wahlweise als Service in einem beliebigen Controller verwenden:

%Vor%

Dann können Sie auf den eigentlichen Logger zugreifen:

%Vor%     
elchivo1250 06.02.2015 19:12
quelle
3

Ich verwende derzeit symfony / monolog-bundle 2.3.0 und der folgende Code funktioniert.

Konfiguration in config.yml

%Vor%

Auf Controllern

%Vor%

Ich hoffe, es hilft.

    
Sergio Romano 23.11.2013 10:06
quelle

Tags und Links