如何在独白日志行中不显示最后一个括号?

2022-08-30 18:03:52
// in my PHP code
$log = new Logger('LaurentCommand');
$log->pushHandler(new StreamHandler('./app/logs/LaurentCommand.log'));
$log->addInfo("Start command",array('username' => 'Joe', 'Age' => '28'));

结果在日志文件 LaurentCommand.log:

[2012-12-20 10:28:11] LaurentCommand.INFO: 启动命令 {“用户名”:“Joe”,“Age”:“28”} []

为什么在结尾处有这个括号?


答案 1

这是额外的数据。行格式化程序的默认格式为 。用户名/年龄是上下文,额外的通常是空的会导致这个空数组 。"[%datetime%] %channel%.%level_name%: %message% %context% %extra%\n"[]

如果使用处理器将数据附加到日志记录,它们通常会将其写入额外的键,以避免与上下文信息发生冲突。如果这确实是一个问题,您可以更改默认格式并省略 。%extra%

编辑:从Monolog 1.11开始,LineFormatter在构造函数中有一个$ignoreEmptyContextAndExtra参数,允许您删除这些参数,因此您可以使用它:

// the last "true" here tells it to remove empty []'s
$formatter = new LineFormatter(null, null, false, true);
$handler->setFormatter($formatter);

答案 2

老问题,但抛出另一个简单的选择:

$slackHandler = new \Monolog\Handler\SlackWebhookHandler(...);
$slackHandler->getFormatter()->ignoreEmptyContextAndExtra(true);

推荐