2014-09-11 10 views
12

Ho appena passato a monolog e volevo registrare il mio messaggio sulla console PHP anziché su un file. Questo potrebbe sembrare ovvio per alcune persone, ma mi ci è voluto un po 'per capire come farlo e non ho trovato una domanda/risposta simile su SO.PHP: Come usare monolog per accedere alla console (php: // out)?

L'esempio a Monolog's Github readme mostra solo come usare un file:

<?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'); 

Ma non indica nessuna parte come i messaggi possono essere registrati alla console. Dopo aver cercato su Google, sono atterrato su una pagina di aiuto per Symphony o su domande di persone che cercano un modo per accedere alla console del browser.

risposta

37

La soluzione è piuttosto semplice. Poiché l'esempio mostra uno StreamHandler è possibile passare in uno stream (anziché il percorso di un file). Per impostazione predefinita, tutto ciò che è echo'ed in PHP viene scritto php://stdout/php://output modo che possiamo utilizzare semplice uno di quelli come flusso per il 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'); 

Spero che questo consente di risparmiare qualcuno un po 'di tempo :)

+0

questo funziona tuttavia mi piacerebbe sapere come archiviare entrambi, cioè mostrare l'output nella console E scrivere in un file? – mahen3d

+0

@ mahen3d aggiungi un altro gestore per farlo ('' '$ log-> pushHandler (nuovo StreamHandler ('/ percorso/su/log/file', Logger :: NOTICE))' '') – georaldc

7

alcuni extra dettagli se si desidera modificare la formattazione predefinita dei messaggi allo stesso tempo:

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); 
Problemi correlati