我正在维护一个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应用程序,哪些应该避免,以及为什么?
答案 0 :(得分:0)
使用Rails'ActiveSupport::TaggedLogging
记录器是一个很好的选择。
config.log_tags
中指定的标记由Rails::Rack::Logger
在每个请求上计算。
除ActionDispatch::Request
属性外,还可以指定接收请求的Proc
(source)。这样就可以访问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_filter
和config.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)
在多用户应用中,我建议使用以下标记:
CU_1
)AD_8
)