在失败的gelf连接上使用Symfony 2 / Monolog防止内部服务器错误

时间:2017-07-28 14:33:04

标签: php symfony monolog

我尝试使用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)。

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

1 个答案:

答案 0 :(得分:2)

最好的办法是在应用程序服务器上使用本地缓存机制来转发请求。这样,如果日志服务器暂时停机,请求可以排队。像流利的系统很适合这一点。另一方面,如果您不关心丢失日志消息,可以查看忽略IgnoreErrorTransportWrapper等错误的传输:

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

进一步阅读:

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