2014-09-11 11 views
12

Ich bin gerade zu Monolog gewechselt und wollte meine Nachricht statt einer Datei in der PHP-Konsole ablegen. Dies mag für einige Leute offensichtlich erscheinen, aber ich brauchte eine Weile, um herauszufinden, wie das geht, und ich konnte keine ähnliche Frage/Antwort zu SO finden.PHP: Wie man Monolog benutzt, um zur Konsole zu loggen (php: // out)?

Das Beispiel auf Monolog's Github readme nur zeigt, wie eine Datei verwenden:

<?php 

use Monolog\Logger; 
use Monolog\Handler\StreamHandler; 

// create a log channel 
$log = new Logger('name'); 
$log->pushHandler(new StreamHandler('path/to/your.log', Logger::WARNING)); // <<< uses a file 

// add records to the log 
$log->addWarning('Foo'); 
$log->addError('Bar'); 

Aber es gibt nicht an jedem Ort, wie Nachrichten an die Konsole protokolliert werden können. Nach der Suche bei Google landete ich entweder auf einer Hilfeseite für Symphony oder nach Fragen von Leuten, die nach einer Möglichkeit suchten, sich an der Browserkonsole anzumelden.

Antwort

37

Die Lösung ist ziemlich einfach. Da das Beispiel eine StreamHandler zeigt, ist es möglich, einen Stream (anstelle des Pfades zu einer Datei) zu übergeben. Standardmäßig alles, was in PHP echo'ed wird geschrieben php://stdout/php://output so können wir einfach Verwendung einer von denen als Strom für die StreamHandler:

<?php 

use Monolog\Logger; 
use Monolog\Handler\StreamHandler; 

// create a log channel 
$log = new Logger('name'); 
$log->pushHandler(new StreamHandler('php://stdout', Logger::WARNING)); // <<< uses a stream 

// add records to the log 
$log->addWarning('Foo'); 
$log->addError('Bar'); 

Hoffnung spart jemand einige Zeit :)

+0

funktioniert das aber ich würde gerne wissen, wie man die beiden archiviert dh die Ausgabe in der Konsole anzeigen UND in eine Datei schreiben? – mahen3d

+0

@ mahen3d fügen Sie einen anderen Handler hinzu, um das für Sie zu tun ('' '$ log-> pushHandler (neuer StreamHandler ('/ Pfad/zu/log/file', Logger :: NOTICE))' '') – georaldc

7

einige Extra Details, wenn Sie die Standard-Nachrichtenformatierung zur gleichen Zeit zwicken möchten:

use Monolog\Logger; 
use Monolog\Formatter\LineFormatter; 
use Monolog\Handler\StreamHandler; 

$output = "[%datetime%] %channel%.%level_name%: %message%\n"; 
$formatter = new LineFormatter($output); 

$streamHandler = new StreamHandler('php://stdout', Logger::DEBUG); 
$streamHandler->setFormatter($formatter); 

$logger = new Logger('LoggerName'); 
$logger->pushHandler($streamHandler);