我正在尝试使用monolog中的symfony记录数组。

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


我得到的输出未格式化为预期的print_r。它全部记录在一行上。

我的config.yml中没有任何独白设置,并且怀疑这可能是问题所在。

如何使用Monolog记录print_r(array),使其以tail -f格式显示?

最佳答案

默认情况下,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

10-08 15:20