2017-08-02 72 views
0

我正試圖使用​​gelf格式將日誌從symfony 2應用流式傳輸到graylog 2服務器。Graylog/Symfony2/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響應代碼引起日誌的請求)。

(另見這個問題:Prevent Internal Server Error with Symfony 2/Monolog on failed gelf connection

GELF-PHP提供了一個IngoreErrorTransportLogger,這似乎是建立這一確切目的。

我如何在Symfony的monolog配置中配置它?

回答

0

事實證明,Symfony有WhatFailureGroup處理程序包裝了一個處理程序,該處理程序忽略了它所包裝的所有日誌處理程序日誌中的錯誤。

我們的配置現在看起來像這樣,它只是在日誌記錄過程中丟失錯誤(可能不理想,但比由於記錄過程中的錯誤而徹底失敗)更好。

monolog: 
    handlers: 
      main: 
       type:   fingers_crossed 
       action_level: warning 
       handler:  grouped 
      grouped: 
       type:   whatfailuregroup 
       members:  [file, graylog] 
      file: 
       type:   stream 
       path:   "%kernel.logs_dir%/%kernel.environment%.log" 
       level:  debug 
      graylog: 
       type: gelf 
       publisher: 
        hostname: my-graylog-server.com 
        port: 12201 
       level: debug 
       formatter: app.gelf_formatter 

本質上講,我們與type: whatfailuregroup取代type: group