Graylog / Symfony2 / Gelf:如何配置记录器以忽略错误?



我正在尝试使用gelf格式将日志从symfony 2应用程序流式传输到graylog 2服务器。

我的单日志配置如下所示:

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防止内部服务器错误/gelf连接失败时的Monolog(

gelf-php提供了一个IngoreErrorTransportLogger,它似乎是为此目的而构建的。

如何在Symfony的单日志配置中配置它?

事实证明,SymfonyWhatFailureGroup处理程序包装器一个处理程序,该处理程序忽略了它包装的所有日志记录处理程序日志中的错误。

我们的配置现在看起来像这样,它只是在日志记录期间丢弃错误(可能不理想,但比由于日志记录期间的错误而直接失败要好(。

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.

您还可以在 Graylog 中使用 UDP 传输。

首先,您需要在 Graylog 中配置 GELF UDP 输入,然后像这样配置它:

monolog:
handlers:
# ...
graylog:
type: gelf
publisher:
id: gelf_publisher
nested: true
services:
gelf_publisher:
class: GelfPublisher
arguments:
- '@gelf_transport'
gelf_transport:
class: GelfTransportUdpTransport
arguments:
- '%env(GRAYLOG_HOSTNAME)%'
- '%env(GRAYLOG_PORT)%'

最新更新