2015-03-28 6 views
10

Sto provando a registrare un array con monolog in symfony.Symfony2 - Come registrare le voci multilinea con monolog?

$logger = $this->get('logger'); 
$logger->info(=print_R($user,true)); 

l'output che ottengo non è formattato come previsto per un print_r. Registra tutto su un'unica riga.

Non ho alcuna impostazione di monolog nel mio config.yml e sospetto che questo potrebbe essere il problema.

Come posso registrare un print_r (array) utilizzando monolog in modo che venga visualizzato in una coda -f?

+1

Hai guardato qui http://symfony.com/doc/current/reference/configuration/monolog.html –

risposta

14

Monolog utilizza Monolog\Formatter\LineFormatter per impostazione predefinita senza argomenti. Il formatter è fondamentalmente l'oggetto che è responsabile dell'output finale nei log. Guardate definizione costruttore:

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

Come si può vedere LineFormatter crea una linea dal vostro output print_r a causa del terzo argomento. È necessario definire un nuovo servizio con argomenti personalizzati per LineFormatter.

# app/config/services.yml - for example 
services: 
    monolog.my_line_formatter: # Your name 
     class: Monolog\Formatter\LineFormatter 
     arguments: [~, ~, true] 

Ora trova la tua definizione di monolog e usa formattatore per quello che ti serve.

# 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

Grazie. La documentazione farebbe bene ad aggiungere qualcosa di così chiaro e diretto. – Chris

+1

Questa è un'ottima risposta, ma guarda questo. è necessario richiamare un servizio attraverso 2 configurazioni separate per fare eco a newline in un file di registro. E come citato @Chris, zero documentazione su come dovrebbe essere fatto. log4j, log4php, railslogger ecc in genere supportano le newline e non ho mai dovuto scrivere più di una o due linee di configurazione, per non parlare di invocare un who chissà quale servizio semplicemente echo perfettamente accettabili newlines ascii. Mucca sacra. – eggmatters

+0

Questo è più sulla libreria Monolog che su Symfony. Symfony ti permette di configurare Monolog in modo che funzioni come libreria autonoma. Se conosci il contenitore dei servizi Monolog e Symfony, questa soluzione è molto chiara ed è disponibile anche in [doc] (http://symfony.com/doc/current/logging/formatter.html). – kba