2017-07-28 60 views
2

我正在嘗試將日誌從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響應代碼引起日誌的請求)。

發現此錯誤的最佳方法是什麼?有錯誤日誌是合理的,但我不希望我的請求出現錯誤,當外部日誌處理服務器不可用時?

回答

1

最好的辦法是在您的應用程序服務器上有一個本地緩存機制來轉發請求。這樣,如果日誌服務器存在暫時停機時間,則請求可以排隊。像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

相關問題