我应该考虑使用哪些标记来记录多用户Rails应用程序?

时间:2016-08-15 08:34:56

标签: ruby-on-rails ruby-on-rails-3 logging multi-user

我正在维护一个Rails 3.2应用程序。客户想要修复一些错误。但是,其中一些是超时错误,并且应用程序是多用户的,因此使用默认日志记录会很难确定导致它们的操作。客户端不需要像Rollbar这样的外部第三方日志记录系统,因此改进现有日志记录是唯一可行的方法。

我宁愿使用Rails提供的记录器而不是新的gem,以确保最小化对应用程序的更改,而不是降低性能,添加新错误或需要额外的维护。

我很难在任何版本的Rails中找到关于标记日志记录的好文档,更不用说Rails 3.2

Rails指南Configuring Rails Applications有一些信息,但它并不以日志记录为中心。

Rails指南“调试Rails应用程序”提到tagged logging的概念,但没有具体细节。 Justin Weiss的文章Keeping Your Logs From Becoming an Unreadable Mess是一个很好的介绍,但没有足够的信息。它讨论了config.log_tags基于来自ActionDispatch::Request的属性的选项,但该类的文档是通用的,并没有足够的意见来建议使用哪些方法,哪些方法不使用,以及为什么。

我应该考虑使用哪些标记来记录多用户Rails应用程序,哪些应该避免,以及为什么?

1 个答案:

答案 0 :(得分:0)

使用Rails'ActiveSupport::TaggedLogging记录器是一个很好的选择。

config.log_tags中指定的标记由Rails::Rack::Logger在每个请求上计算。

ActionDispatch::Request属性外,还可以指定接收请求的Procsource)。这样就可以访问Rack env。

config.log_tags [:uuid, proc { |request| ExampleService.call(request.env) }]

要访问更高级别的API,around_filter中的简单ActionController就足够了。

around_filter :current_user_tag

def current_user_tag
  logger.tagged("CU_#{current_user.id}") do
    yield
  end
end

使用上述around_filterconfig.log_tags = [:uuid]

示例
[830bb7df-b760-4537-94a7-62ab0f862e52] Started GET "/users" for ::1 at 2016-09-16 16:15:20 +0100
[830bb7df-b760-4537-94a7-62ab0f862e52] Processing by UsersController#index as HTML
[830bb7df-b760-4537-94a7-62ab0f862e52]   User Load (0.1ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ?  ORDER BY "users"."id" ASC LIMIT 1  [["id", 1]]
[830bb7df-b760-4537-94a7-62ab0f862e52] [CU_1]   User Load (0.1ms)  SELECT "users".* FROM "users"
[830bb7df-b760-4537-94a7-62ab0f862e52] [CU_1]   Rendered users/_user.html.erb (0.2ms)
[830bb7df-b760-4537-94a7-62ab0f862e52] [CU_1]   Rendered users/index.html.erb within layouts/application (1.3ms)
[830bb7df-b760-4537-94a7-62ab0f862e52] [CU_1]   Rendered layouts/_navigation_links.html.erb (0.1ms)
[830bb7df-b760-4537-94a7-62ab0f862e52] [CU_1]   Rendered layouts/_nav_links_for_auth.html.erb (0.2ms)
[830bb7df-b760-4537-94a7-62ab0f862e52] [CU_1]   Rendered layouts/_navigation.html.erb (1.8ms)
[830bb7df-b760-4537-94a7-62ab0f862e52] [CU_1]   Rendered layouts/_messages.html.erb (0.0ms)
[830bb7df-b760-4537-94a7-62ab0f862e52] Completed 200 OK in 85ms (Views: 83.6ms | ActiveRecord: 0.2ms)

在多用户应用中,我建议使用以下标记:

  • 请求ID
  • 当前用户ID(例如CU_1
  • 当前管理员ID(例如AD_8