【问题标题】:Prevent Internal Server Error with Symfony 2 / Monolog on failed gelf connection使用 Symfony 2 / Monolog 在失败的 gelf 连接上防止内部服务器错误
【发布时间】:2018-01-04 16:17:41
【问题描述】:

我正在尝试使用 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 响应代码)。

捕获此错误的最佳方法是什么?有错误日志是合理的,但我不希望我的请求在外部日志处理服务器不可用时出错?

【问题讨论】:

    标签: php symfony monolog


    【解决方案1】:

    最好的办法是在您的应用服务器上拥有一个本地缓存机制来转发请求。这样,如果日志服务器暂时停机,请求可以排队。像 fluentd 这样的系统可以很好地解决这个问题。另一方面,如果您不在乎丢失日志消息,则可以查看忽略诸如IgnoreErrorTransportWrapper 之类的错误的传输:

    https://github.com/bzikarsky/gelf-php/blob/master/src/Gelf/Transport/IgnoreErrorTransportWrapper.php

    进一步阅读:

    https://github.com/bzikarsky/gelf-php/issues/56

    【讨论】:

    • 嗨!感谢您的快速回复。 IgnoreErrorTransport 包装器是我正在寻找的(至少现在是这样)。你知道我如何在 symfony 配置中指定它吗?
    • 对不起 - 没有线索。我已经 3 年没有做过 symfony 了。 :-P
    猜你喜欢
    • 1970-01-01
    • 2012-01-11
    • 2018-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多