Предотвращение ошибки внутреннего сервера с помощью Symfony 2 / Monolog при неудачном соединении с gelf

Я пытаюсь передать журналы из приложения 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 ответов на запрос, вызывающий журнал).

Каков наилучший способ поймать эту ошибку? Наличие журнала ошибок является резонансным, но я не хочу, чтобы мои запросы были ошибочными, когда внешний сервер обработки журналов недоступен?

Related of "Предотвращение ошибки внутреннего сервера с помощью Symfony 2 / Monolog при неудачном соединении с gelf"

Лучше всего иметь локальный механизм кэширования на сервере приложений для пересылки запросов. Таким образом, если есть кратковременный простоя сервера журналов, запросы могут быть поставлены в очередь. Системы, такие как fluentd, хорошо работают для этого. С другой стороны, если вы не заботитесь о потере сообщений журнала, вы можете посмотреть на транспорт, который игнорирует ошибки, такие как IgnoreErrorTransportWrapper :

https://github.com/bzikarsky/gelf-php/blob/master/src/Gelf/Transport/IgnoreErrorTransportWrapper.php

Дальнейшее чтение:

https://github.com/bzikarsky/gelf-php/issues/56