0
我已經使用lograge在生產中將我的日誌輸出轉換爲JSON,它使它更容易在多個日誌服務(如亞馬遜)上顯示。Rails - 錯誤日誌回溯作爲JSON
config.lograge.enabled = true
config.lograge.formatter = Lograge::Formatters::Logstash.new
# add time to lograge
config.lograge.custom_options = lambda do |event|
params = event.payload[:params].reject { |k| %w(controller action).include?(k) }
{
time: event.time,
params: params
}
end
然而,當發生錯誤時錯誤回溯還記錄,但不作爲JSON,而不是作爲一個正常的字符串(和每回溯一行條目= _ =)。這就造成了很多不必要的線(在亞馬遜CloudWatch的例子:)
F, [2016-11-12T18:08:09.774760 #15892] FATAL -- : [2f480b01-d8fa-459c-97dd-a904c98cfce9] SomeModule::SomeError (error explanation):
18:08:09
F, [2016-11-12T18:08:09.774790 #15892] FATAL -- : [2f480b01-d8fa-459c-97dd-a904c98cfce9]
i-xxx
F, [2016-11-12T18:08:09.774790 #15892] FATAL -- : [2f480b01-d8fa-459c-97dd-a904c98cfce9]
18:08:09
F, [2016-11-12T18:08:09.774813 #15892] FATAL -- : [2f480b01-d8fa-459c-97dd-a904c98cfce9] actionpack (5.0.0.1) lib/some_module.rb:53:in `call'
i-xxxxx
F, [2016-11-12T18:08:09.774813 #15892] FATAL -- : [2f480b01-d8fa-459c-97dd-a904c98cfce9] actionpack (5.0.0.1) lib/some_module.rb:53:in `call'
18:08:09
F, [2016-11-12T18:08:09.774834 #15892] FATAL -- : [2f480b01-d8fa-459c-97dd-a904c98cfce9] actionpack (5.0.0.1) lib/some_module.rb:31:in `call'
i-xxxxx
F, [2016-11-12T18:08:09.774834 #15892] FATAL -- : [2f480b01-d8fa-459c-97dd-a904c98cfce9] actionpack (5.0.0.1) lib/some_module.rb:31:in `call'
相反,我希望凝聚所有這些回溯到一個單一的JSON日誌看起來像
{
error: 'SomeModule::SomeError (error explanation)',
backtrace: [
'some_gem (5.x) lib/some_module.rb:53:in `call',
'some_gem (5.x) lib/some_module.rb:31:in `call', ...]
}
哪有除了使用lograge json格式化請求而不出錯之外,我這麼做了嗎?
對不起,這個例子實際上是誤導性的。我已經在捕捉無與倫比的路線,並且在我的應用程序中不會再引發異常。我的問題是關於處理任何錯誤,而不僅僅是路由錯誤,我會編輯它來選擇一個不同的錯誤 –
我明白了。是的,lograge不適用於記錄應用程序錯誤。您可以嘗試'logstash-logger'gem來記錄看起來像lograge顯示的事件(如果使用logstash事件格式)。 – Alex