我知道這是一個老問題,但我跑也將其納入,我想分享我的解決方案。
對數行末尾的方括號是由於Monolog的LineFormatter
嘗試%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));
}
}
您可以通過注射它的一個實例到你的獨白處理程序類,像這樣使用這個類:
$handler = new Monolog\Handler\StreamHandler('/path/to/my/logfile', 'debug');
$handler->setFormatter(new My\Fancy\Monolog\LineFormatter());
$monolog->pushHandler($handler);
享受!
Seldaek意味着'$日誌=新記錄儀( 'LaurentCommand'); $ handler = new StreamHandler('./ app/logs/LaurentCommand.log'); $ handler-> setFormatter(new LineFormatter(「[%datetime%]%channel%。%level_name%:%message%%context%\ n」)); $ log-> pushHandler($ handler); $ log-> addInfo(「Start command」,array('username'=>'Joe','Age'=>'28'));' – nevvermind
就像一個魅力。謝謝 :) –