Graylog / Symfony2 / 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

Когда сервер серого журнала недоступен, я получаю (по понятным причинам) ошибку соединения, отказанную

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

(Смотрите также этот вопрос: Предотвратить внутреннюю ошибку сервера с Symfony 2 / Monolog при сбое подключения gelf)

gelf-php обеспечивает IngoreErrorTransportLogger, который, кажется, построен для этой конкретной цели.

Как я могу настроить это в монологе Symfony?

1

Решение

Оказывается, у Symfony есть WhatFailureGroup handler wrapper — обработчик, который игнорирует ошибки из журналов всех обработчиков журналов, которые он переносит.

Наш конфиг теперь выглядит так: он просто сбрасывает ошибки во время регистрации (вероятно, не идеально, но лучше, чем полный сбой из-за ошибки во время регистрации).

monolog:
handlers:
main:
type:         fingers_crossed
action_level: warning
handler:      grouped
grouped:
type:         whatfailuregroup
members:      [file, graylog]
file:
type:         stream
path:         "%kernel.logs_dir%/%kernel.environment%.log"level:        debug
graylog:
type: gelf
publisher:
hostname: my-graylog-server.com
port: 12201
level: debug
formatter: app.gelf_formatter

По сути мы заменили type: group с type: whatfailuregroup,

0

Другие решения

Других решений пока нет …