Graylog/Symfony2/Gelf:如何配置记录器以忽略错误?
问题描述:
我正试图使用gelf格式将日志从symfony 2应用流式传输到graylog 2服务器。Graylog/Symfony2/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响应代码引起日志的请求)。
(另见这个问题:Prevent Internal Server Error with Symfony 2/Monolog on failed gelf connection)
GELF-PHP提供了一个IngoreErrorTransportLogger,这似乎是建立这一确切目的。
我如何在Symfony的monolog配置中配置它?
答
事实证明,Symfony有WhatFailureGroup
处理程序包装了一个处理程序,该处理程序忽略了它所包装的所有日志处理程序日志中的错误。
我们的配置现在看起来像这样,它只是在日志记录过程中丢失错误(可能不理想,但比由于记录过程中的错误而彻底失败)更好。
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: whatfailuregroup
取代type: group
。