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

时间:2017-08-02 08:17:43

标签: php symfony monolog graylog2 gelf

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

我的monolog配置如下:

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配置中配置它?

2 个答案:

答案 0 :(得分:0)

事实证明,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: group替换为type: whatfailuregroup

答案 1 :(得分:0)

您还可以在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)%'