gpt4 book ai didi

ruby-on-rails - Rails 5 logstash 产生太多的日志项而不是一个

转载 作者:行者123 更新时间:2023-12-03 14:44:10 24 4
gpt4 key购买 nike

有什么方法可以自定义记录标准错误的方式?从 Rails 5 开始,logstash 收到一个 fatal error 作为许多错误项。 Rails 4 只创建了一个项目(我喜欢它的方式)

问题似乎是,从 Rails 5 开始,log_error DebugExceptions的方法中间件打印回溯调用的所有行 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

我正在使用 logstash-logger:json_lines UDP 上的格式化程序。

我使用的 logstash 配置非常适用于 rails 4 和其他应用程序,但不适用于 rails 5(因为它将一个错误分成几个)。

我知道,我可以用 rescue_from挽救 Controller 中的错误,但这不会捕获路由或其他错误,我猜?

先感谢您。

最佳答案

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

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

  • 很难为异常导航原始日志,即使它们被标记和索引,也可能会出现当你有一个嘈杂的非关键任务异常淹没日志时,让你错过一些罕见的真正重要的异常。

    至于在 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 ,但这样的异常不会被记录,如果你不重新提出它,或者它发生在中间件本身,不推荐)

    关于ruby-on-rails - Rails 5 logstash 产生太多的日志项而不是一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47472657/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com