Я пытаюсь передать журналы из приложения symfony 2 на сервер graylog 2, используя формат gelf.
Моя монологическая конфигурация выглядит следующим образом:
monolog: handlers: # --- 8< --- # ... # --- >8 --- graylog: type: gelf publisher: hostname: my-graylog-server.com port: 12201 level: debug formatter: app.gelf_formatter
Когда сервер graylog недоступен, я получаю (понятно) сообщение об отказе от отказа
[2017-07-28 16:03:25] app.ERROR: Failed to write to socket: fwrite(): send of 153 bytes failed with errno=111 Connection refused (8) [] []
что приводит к ошибке внутреннего сервера (500 ответов на запрос, вызывающий журнал).
Каков наилучший способ поймать эту ошибку? Наличие журнала ошибок является резонансным, но я не хочу, чтобы мои запросы были ошибочными, когда внешний сервер обработки журналов недоступен?
Лучше всего иметь локальный механизм кэширования на сервере приложений для пересылки запросов. Таким образом, если есть кратковременный простоя сервера журналов, запросы могут быть поставлены в очередь. Системы, такие как fluentd, хорошо работают для этого. С другой стороны, если вы не заботитесь о потере сообщений журнала, вы можете посмотреть на транспорт, который игнорирует ошибки, такие как IgnoreErrorTransportWrapper
:
https://github.com/bzikarsky/gelf-php/blob/master/src/Gelf/Transport/IgnoreErrorTransportWrapper.php
Дальнейшее чтение: