【问题标题】:Rails 5 logstash produces too many log items instead of oneRails 5 logstash 产生了太多的日志项而不是一个
【发布时间】: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


    【解决方案1】:

    实际上,对于错误处理,使用专用的异常跟踪解决方案(如 rollbar、airbrake、sentry、errbit 或类似解决方案)更方便。 重点在于您需要的例外情况:

    1. 一种快速查明发生位置和条件的方法,包括请求参数、用户 ID、标头等。默认情况下,并非所有这些都写入日志。但大多数异常捕获器还会记录有关请求的其他信息。
    2. 警报,但不要太吵,因为当生产中出现问题时 - 您很快就会记录数百个错误,您不能简单地将所有这些转发到您的电子邮件或即时通讯。所以必须支持聚合
    3. 可选,但有用 - 跟踪打开/已解决的错误

    很难在原始日志中导航异常,即使它们已被标记和索引,也可能存在这样的情况,即您有一个嘈杂的非关键任务异常,它会淹没日志,并让您错过一些罕见的非常重要的异常一个。

    至于在 rails 中捕获异常 - 最好在中间件中进行,就像上面提到的所有工具(和 rails 本身)一样:

    class MyExceptionMidleware
      def initialize(app)
        @app = app
      end
    
      def call(env)
        @app.call(env)
      rescue => e
        # handle the error any way you like, for example:
        Rails.logger.fatal("oops, #{e.inspect}, backtrace: #{e.backtrace.join("\n")}")
      end
    end
    
    config.middleware.insert_after(ActionDispatch::DebugExceptions, MyExceptionMidleware)
    

    (或insert_before,但是如果你不重新引发它,或者如果它发生在中间件本身,则不会记录异常,不推荐)

    【讨论】:

      猜你喜欢
      • 2017-08-02
      • 2021-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-20
      相关资源
      最近更新 更多