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


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

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

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

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

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

1 12

1 ответ:

Monolog использует 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