Monolog Logger在每条日志消息的末尾输出空数组

saz*_*azr 3 php monolog

我的记录器对象在每行的末尾输出空数组 - [] [].例如;

[2017-08-17 12:26:02] import_log.INFO:checkForDuplicates :: is_processing [] []
[2017-08-17 12:26:04] import_log.INFO:is duplicate [] []

无论如何我可以阻止这种情况发生吗?我只想在没有空数组的情况下注销,即如下所示:

[2017-08-17 12:26:02] import_log.INFO:checkForDuplicates :: is_processing
[2017-08-17 12:26:04] import_log.INFO:重复

我正在创建自己的日志:

protected function importXML($fName) {

    // Create a log file for each XML file imported
    $logger = new Logger("import_log");
    $logger->pushHandler(new StreamHandler(storage_path('./logs/' . $fName . '.log')), Logger::INFO);

    ....

    $logger->info($myString);


    ....

    $logger->info($myObject);
}
Run Code Online (Sandbox Code Playgroud)

Sco*_*pey 9

这些空数组是日志条目的上下文额外属性.添加日志条目时,将提供上下文作为附加数组参数.Extra附加到您的记录器上的"处理器".

可以隐藏这些空数组:

如果没有formatter为Monolog 定义,它将使用默认值LineFormatter.a 的构造函数参数之一LineFormatter是您正在寻找的选项:

public function __construct(string $format = null, string $dateFormat = null, bool $allowInlineLineBreaks = false, bool $ignoreEmptyContextAndExtra = false)
Run Code Online (Sandbox Code Playgroud)

具体来说,第四个选项是相关的 - bool $ignoreEmptyContextAndExtra = false.如果您创建自己的格式化程序:

$formatter = new LineFormatter(null, null, false, true);
Run Code Online (Sandbox Code Playgroud)

把它交给你的经纪人:

$handler = new StreamHandler(storage_path('./logs/' . $fName . '.log');
$handler->setFormatter($formatter);
Run Code Online (Sandbox Code Playgroud)

这应该可以防止记录器显示"context"和"extra"的空数组.