2015-03-28 13 views
10

Próbuję zalogować tablicę z monologiem w symfony.Symfony2 - Jak rejestrować wpisy wieloliniowe z monologiem?

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

Otrzymane wyjście nie jest sformatowane jako print_r. Loguje to wszystko w jednej linii.

Nie mam żadnych ustawień monologu w moim config.yml i podejrzewam, że to może być problem.

Jak mogę zalogować print_r (tablica) używając monologu, aby wyświetlało się sformatowane w tail -f?

+1

Szukały tutaj http://symfony.com/doc/current/reference/configuration/monolog.html –

Odpowiedz

14

Monolog domyślnie używa Monolog\Formatter\LineFormatter bez żadnych argumentów. Formatter jest w zasadzie obiektem odpowiedzialnym za końcowe wyniki w dziennikach. Spójrz na definicji konstruktora:

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

Jak widać LineFormatter tworzy jedną linię z Twojego print_r wyjściu z powodu trzeciego argumentu. Musisz zdefiniować nową usługę z niestandardowymi argumentami dla LineFormatter.

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

Teraz znajdź swoją definicję monologu i użyj formatera, aby uzyskać to, czego potrzebujesz.

# 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

Dzięki. Dokumentacja zrobiłaby dobrze, aby dodać coś tak jasnego i prostego. – Chris

+1

To jest świetna odpowiedź, ale spójrz na to. musisz wywołać usługę w dwóch osobnych konfiguracjach, aby wywołać echo znaków nowej linii w pliku dziennika. I jak wspomniano @Chris, zera dokumentacja, jak to zrobić. log4j, log4php, railslogger itp. zazwyczaj obsługują newlines i nigdy nie musiałem pisać więcej niż jedną lub dwie linie konfiguracyjne, nie mówiąc już o tym, kto wie, która usługa po prostu echo doskonale akceptuje nowe linie ascii. Święta krowa. – eggmatters

+0

To więcej informacji o bibliotece Monolog niż Symfony. Symfony umożliwia skonfigurowanie Monologa w taki sposób, aby faktycznie działał jako samodzielna biblioteka. Jeśli znasz kontener usługi Monolog i Symfony, to rozwiązanie jest bardzo jasne i nawet w [doc] (http://symfony.com/doc/current/logging/formatter.html). – kba

Powiązane problemy