【发布时间】:2017-11-24 11:46:34
【问题描述】:
有什么方法可以自定义记录标准错误的方式吗?从 Rails 5 开始,logstash 收到一个致命错误作为许多错误项。 Rails 4 只创建了一项(我喜欢它的方式)
问题似乎是,从 Rails 5 开始,DebugExceptions 中间件的 log_error 方法分别打印调用 logger.fatal 的所有回溯行,而不是 Rails 4,它将所有行连接到一个字符串之前只调用一次logger.fatal。
比较:
Rails 4:debug_exceptions.rb
message = "\n#{exception.class} (#{exception.message}):\n"
message << exception.annoted_source_code.to_s if exception.respond_to?(:annoted_source_code)
message << " " << trace.join("\n ")
logger.fatal("#{message}\n\n")
Rails 5:debug_exceptions.rb
logger.fatal " "
logger.fatal "#{exception.class} (#{exception.message}):"
log_array logger, exception.annoted_source_code if exception.respond_to?(:annoted_source_code)
logger.fatal " "
log_array logger, trace
我在 UDP 上使用 logstash-logger 和 :json_lines 格式化程序。
我使用的 logstash 配置非常适用于 rails 4 和其他应用程序,但不适用于 rails 5(因为它将一个错误分成多个)。
我知道,我可以使用 rescue_from 来挽救控制器中的错误,但我猜这不会捕获路由或其他错误?
提前谢谢你。
【问题讨论】:
标签: ruby-on-rails logging logstash kibana