1

我正在尝试使用 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 防止内部服务器错误 / Monolog on failed gelf connection

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

如何在 Symfony 的独白配置中进行配置?

4

2 回答 2

2

事实证明,Symfony 有WhatFailureGrouphandler 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: grouptype: whatfailuregroup.

于 2017-08-02T09:12:30.640 回答
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)%'
于 2019-12-07T22:39:05.333 回答