Symfony2 - как регистрировать многострочные записи с помощью monolog?

Я пытаюсь зарегистрировать массив с monolog в symfony.

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

вывод, который я получаю, не отформатирован как print_r. Все записывается в одну строку.

У меня нет настроек монолога в моей конфигурации.yml и подозревают, что это может быть проблемой.

Как я могу зарегистрировать print_r (массив) с помощью monolog, чтобы он отображался в формате tail-f?

1 ответов


монолог использует Monolog\Formatter\LineFormatter по умолчанию без каких-либо аргументов. Форматирование-это в основном объект, который отвечает за конечный вывод в ваших журналах. Посмотрите на определение конструктора:

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

как вы можете видеть, LineFormatter создает одну строку из вашего вывода print_r из-за третьего аргумента. Вам нужно определить новую службу с пользовательскими аргументами для LineFormatter.

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

теперь найдите свое определение монолога и используйте форматер для того, что вам нужно.

# 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