我已经使用lograge将我的日志输出转换为生产中的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格式化之外,我该如何做呢?
答案 0 :(得分:0)
您希望添加新路由以捕获所有RoutingError异常。 lograge自述文件很好地解释了要做什么(https://github.com/roidrage/lograge)。简而言之,您需要一条捕获“全部”的路由,即get '*unmatched_route', to: 'application#route_not_found'
并将该路由发送到404,而不是触发异常。