Graylog / Symfony2 / Gelf:如何配置记录器以忽略错误?
Graylog / Symfony2 / Gelf: How to configure logger to ignore errors?
我正在尝试使用 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
当 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 响应代码)。
(另请参阅此问题:)
gelf-php 提供了一个 IngoreErrorTransportLogger,它似乎正是为此目的而构建的。
如何在 Symfony 的独白配置中配置它?
事实证明,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
。
您还可以在 Graylog 中使用 UDP 传输。
首先你需要在 Graylog 中配置 GELF UDP 输入,然后这样配置:
monolog:
handlers:
# ...
graylog:
type: gelf
publisher:
id: gelf_publisher
nested: true
services:
gelf_publisher:
class: Gelf\Publisher
arguments:
- '@gelf_transport'
gelf_transport:
class: Gelf\Transport\UdpTransport
arguments:
- '%env(GRAYLOG_HOSTNAME)%'
- '%env(GRAYLOG_PORT)%'
我正在尝试使用 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
当 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 响应代码)。
(另请参阅此问题:
gelf-php 提供了一个 IngoreErrorTransportLogger,它似乎正是为此目的而构建的。
如何在 Symfony 的独白配置中配置它?
事实证明,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
。
您还可以在 Graylog 中使用 UDP 传输。
首先你需要在 Graylog 中配置 GELF UDP 输入,然后这样配置:
monolog:
handlers:
# ...
graylog:
type: gelf
publisher:
id: gelf_publisher
nested: true
services:
gelf_publisher:
class: Gelf\Publisher
arguments:
- '@gelf_transport'
gelf_transport:
class: Gelf\Transport\UdpTransport
arguments:
- '%env(GRAYLOG_HOSTNAME)%'
- '%env(GRAYLOG_PORT)%'