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

标签 php symfony monolog

我正在尝试使用 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

当 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

关于php - 在失败的 gelf 连接上使用 Symfony 2/Monolog 防止内部服务器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45376128/

相关文章:

php - 获取文件夹中最近更新文件的文件时间

PHP CMS 图片上传错误

php - <?= ?> php 中的特殊标签

php - Symfony 2 缓存预热

symfony - MonologBu​​ndle FingerCrossedHandler : how to configure excluded_404s

php - Google Drive PHP API - 简单的文件上传

php - 访问自定义模块 Drupal 8 的 Twig 模板中的变量

forms - 未定义的方法 Symfony\Component\Form\FormBuilder::createView()

php - Laravel 5 > 使用 monolog 自省(introspection)处理器

php - 测试 monlog 包时出现 500 错误