Ich möchte mich in eine andere Datei als das übliche dev.log oder prod.log
einloggenIch 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.
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')
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%Ich verwende derzeit symfony / monolog-bundle 2.3.0 und der folgende Code funktioniert.
Konfiguration in config.yml
Auf Controllern
%Vor%Ich hoffe, es hilft.
Tags und Links php logging monolog symfony-2.1