Если я правильно понимаю, вы хотите иметь визуальный маркер в вашем файле журнала, который отмечает конец сообщений журнала запроса, верно?Самое простое решение, которое я могу себе представить, - регистрировать дополнительные сообщения в конце цикла запроса, например,
$logger->debug('----------------------------------------------------------');
$logger->debug('END OF REQUEST');
$logger->debug('----------------------------------------------------------');
. При использовании Symfony я бы добавил обработчик событий для kernel.finish_request
или kernel.terminate
который вызывает регистратор.
Если вы хотите, чтобы дополнительные вызовы журнала не использовались в вашем коде начальной загрузки / обработки событий, вы можете написать свой собственный класс обработчика Monolog, который может обернуть другие обработчики (см. BufferHandler
дляпример обработчика упаковки):
handle
будет передавать сообщения обработчику с упаковкой. handleBatch
может прикрепить маркер к концу пакета перед его передачейна close
может также отправить последнее сообщение журнала обернутому хэдлеру перед вызовом его функции закрытия.Но close
должен быть идемпотентным, так что это может создать проблему для этого случая.
Если ваши запросы долго выполняются и их сообщения смешиваются в файле журнала, добавьте BufferHandler
вдержите их отдельно.
Если вы хотите удалить дополнительную информацию журнала (метка времени, источник, серьезность) перед маркером, я бы порекомендовал написать свой собственный форматер (перенос / создание подклассов LineFormatter), который дает разныевывод в зависимости от того, является ли сообщение журнала «сообщением о завершении» или нет.В этом случае я бы рекомендовал не отправлять несколько сообщений в качестве маркеров, а отправлять одно и определять формат маркера в форматере.