Я знаю, что это старый вопрос, но я тоже столкнулся с ним и хочу поделиться своим решением.
Скобки в конце строк журнала связаны с тем, как Monolog LineFormatter
пытается 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));
}
}
Вы можете использовать этот класс, внедрив его экземпляр в свой класс-обработчик Monolog, например:
$handler = new Monolog\Handler\StreamHandler('/path/to/my/logfile', 'debug');
$handler->setFormatter(new My\Fancy\Monolog\LineFormatter());
$monolog->pushHandler($handler);
Наслаждаться!
person
curtisdf
schedule
12.11.2013