Intereting Posts
Ларавель красноречиво считает соотношение Ajax-запрос ничего не возвращает. Зачем? создание события календаря Google Как объединить два массива путем суммирования объединенных значений получить последний вставленный id в sql server 2008 Удалить сеанс Facebook после входа в PHP SDK Как игнорировать вопросительный знак в качестве заполнителя при использовании PDO с PostgreSQL Как установить выбранный элемент в раскрывающемся списке PHP-скрипты командной строки игнорируют директивы php.ini и ini_set ('memory_limit', …) Обработка PHP не работает Как правильно использовать маркеры-носители? Amazon s3 Эластичный транскодер ERROR: указанный конвейер не найден Генератор HTML: конвертируйте HTML в PlainText и помещайте в TextBox с помощью PHP Получить подробную информацию (родительский платеж) о возмещении jSignature jQuery plugin – сделать изображение из подписи, хранящейся в DB (base30)

Как не показывать последнюю скобку в монологическом журнале?

// 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: Начать команду {"username": "Joe", "Age": "28"} []

Почему этот кронштейн в конце?

Это дополнительные данные. Формат по умолчанию для 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); 

Я знаю, что это старый вопрос, но я столкнулся с ним и хочу поделиться своим решением.

Скобки в конце строк журнала связаны с тем, как 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); 

Наслаждайтесь!

Старый вопрос, но выбрасывает еще один простой вариант:

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