防止发生内部服务器错误Symfony 2/Monolog失败的gelf连接

问题描述:

我正在尝试将日志从symfony 2应用程序流式传输到使用gelf格式的graylog 2服务器。防止发生内部服务器错误Symfony 2/Monolog失败的gelf连接

我的独白配置如下所示:

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响应代码引起日志的请求)。

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

最好的办法是在您的应用程序服务器上有一个本地缓存机制来转发请求。这样,如果日志服务器存在暂时停机时间,则请求可以排队。像fluentd这样的系统很好地工作。在另一方面,如果你不在乎失去日志信息,你可以看看,忽略错误的传输,如IgnoreErrorTransportWrapper

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

延伸阅读:

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

+0

喜!感谢您的快速回复。 IgnoreErrorTransport包装是我正在寻找(至少现在)。你知道我可以在symfony配置中指定吗? – Paul

+0

对不起 - 没有线索。我3年没有做过symfony。 :-P – PressingOnAlways

+0

好的,谢谢,我应该可以找到它;) – Paul