stl*_*loc 22 php symfony monolog
// 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'));
Run Code Online (Sandbox Code Playgroud)
结果在日志文件LaurentCommand.log中:
[2012-12-20 10:28:11] LaurentCommand.INFO:开始命令{"username":"Joe","Age":"28"} []
为什么这个支架到底?
Sel*_*aek 49
这是额外的数据.LineFormatter的默认格式是"[%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);
Run Code Online (Sandbox Code Playgroud)
我知道这是一个老问题,但我也遇到了这个问题,我想分享我的解决方案。
日志行末尾的括号是由于 MonologLineFormatter
尝试json_encode()
处理%extra%
. 括号是空数组的 JSON 表示形式。
为了关闭这些括号,我最终不得不使用Monolog\Formatter\LineFormatter
自己的类进行子类化并覆盖其convertToString($data)
函数,以便在没有数据存在时返回一个空字符串。这是我的新子类:
namespace My\Fancy\Monolog;
use Monolog\Formatter\LineFormatter;
class LineFormatter extends LineFormatter {
protected function convertToString($data)
{
if (null === $data || is_scalar($data)) {
return (string) $data;
}
// BEGIN CUSTOM CODE - This section added to prevent empty
// brackets from appearing at the end of log lines:
if ((is_array($data) && !$data)
|| is_object($data) && !get_object_vars($data)) {
return '';
}
// END CUSTOM CODE
$data = $this->normalize($data);
if (version_compare(PHP_VERSION, '5.4.0', '>=')) {
return $this->toJson($data);
}
return str_replace('\\/', '/', json_encode($data));
}
}
Run Code Online (Sandbox Code Playgroud)
您可以通过将此类的实例注入 Monolog 处理程序类来使用此类,如下所示:
$handler = new Monolog\Handler\StreamHandler('/path/to/my/logfile', 'debug');
$handler->setFormatter(new My\Fancy\Monolog\LineFormatter());
$monolog->pushHandler($handler);
Run Code Online (Sandbox Code Playgroud)
享受!
老问题,但抛出另一个简单的选择:
$slackHandler = new \Monolog\Handler\SlackWebhookHandler(...);
$slackHandler->getFormatter()->ignoreEmptyContextAndExtra(true);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11235 次 |
最近记录: |