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



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

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

最好的办法是在应用程序服务器上使用本地缓存机制来转发请求。这样,如果日志服务器有短暂的停机时间,请求就可以排队。像fluentd这样的系统可以很好地做到这一点。另一方面,如果您不关心丢失日志消息,则可以查看忽略错误(例如IgnoreErrorTransportWrapper

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

延伸阅读:

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

最新更新