2015-03-28 11 views
10

Ich versuche, ein Array mit Monolog in Symfony zu protokollieren.Symfony2 - Wie melde ich mehrzeilige Einträge mit Monolog?

Die Ausgabe, die ich bekomme, ist nicht formatiert, da eine print_r erwartet würde. Es protokolliert alles in einer Zeile.

Ich habe keine Monolog-Einstellungen in meiner config.yml und vermute, dies könnte das Problem sein.

Wie kann ich eine print_r (Array) mit Monolog protokollieren, so dass es formatiert in einem Tail-f angezeigt?

+1

Haben Sie hier sah http://symfony.com/doc/current/reference/configuration/monolog.html –

Antwort

14

Monolog verwendet Monolog\Formatter\LineFormatter standardmäßig ohne Argumente. Formatter ist im Grunde ein Objekt, das für die endgültige Ausgabe in Ihren Protokollen verantwortlich ist. Schauen Sie sich Konstruktordefinition: wegen dritten Arguments

public function __construct($format = null, $dateFormat = null, $allowInlineLineBreaks = false, $ignoreEmptyContextAndExtra = false) 

Wie Sie sehen können LineFormatter eine Zeile von Ihrer print_r Ausgabe erstellt. Sie müssen einen neuen Service mit benutzerdefinierten Argumenten für LineFormatter definieren.

Finden Sie jetzt Ihre Monolog-Definition und verwenden Sie Formatierer für das, was Sie brauchen.

# Example from default config_dev.yml 
monolog: 
    handlers: 
     main: 
      type: stream 
      path: "%kernel.logs_dir%/%kernel.environment%.log" 
      level: debug 
      formatter: monolog.my_line_formatter 
+0

Danke. Die Dokumentation würde gut dazu beitragen, etwas so klar und unkompliziert hinzuzufügen. – Chris

+1

Dies ist eine gute Antwort, aber sieh dir das an. Sie müssen einen Service über zwei separate Konfigurationen hinweg aufrufen, um Zeilenumbrüche in einer Protokolldatei anzuzeigen. Und wie @Chris erwähnt hat, keine Dokumentation darüber, wie das gemacht werden sollte. log4j, log4php, railslogger usw. unterstützen in der Regel Zeilenumbrüche und ich musste nie mehr als ein oder zwei Konfigurationszeilen schreiben, geschweige denn einen Wer weiß, welcher Dienst einfach perfekt akzeptable ASCII-Zeilenumbrüche enthält. Heilige Kuh. – eggmatters

+0

Dies ist mehr über Monolog Bibliothek als Symfony. Mit Symfony können Sie Monolog so konfigurieren, dass es als eigenständige Bibliothek funktioniert. Wenn Sie Monolog und Symfony Service Container kennen, dann ist diese Lösung sehr klar und es ist sogar in [doc] (http://symfony.com/doc/current/logging/formatter.html). – kba