gpt4 book ai didi

ruby-on-rails - 使用 ActiveRecord 时 Rails 日志的格式

转载 作者:行者123 更新时间:2023-12-04 21:47:27 25 4
gpt4 key购买 nike

所以我有一个之前不需要 ActiveRecord 的应用程序 - 因此我们从应用程序中删除了 ActiveRecord 并将我们的日志格式化为这样:

在 application.rb 中:

class DreamLogFormatter < Logger::Formatter
SEVERITY_TO_COLOR_MAP = {'DEBUG'=>'32', 'INFO'=>'0;37', 'WARN'=>'35', 'ERROR'=>'31', 'FATAL'=>'31', 'UNKNOWN'=>'37'}

def call(severity, time, progname, msg)
color = SEVERITY_TO_COLOR_MAP[severity]
"\033[0;37m[%s] \033[#{color}m%5s - %s\033[0m\n" % [time.to_s(:short), severity, msg2str(msg)]
end
end

class ActiveSupport::BufferedLogger
def formatter=(formatter)
@log.formatter = formatter
end
end

在开发.rb
config.logger = Logger.new("log/#{Rails.env}.log")
config.logger.formatter = DreamLogFormatter.new
ActiveResource::Base.logger = Logger.new("log/#{Rails.env}.log")
ActiveResource::Base.logger.formatter = DreamLogFormatter.new

注:添加 ActiveResource 记录器配置是因为我们希望 ActiveResource 调用的 URL 输出如下所示:
GET http://localhost:2524/users/
--> 200 OK 239 (13.0ms)

使用此配置进行日志记录为我们提供了一个很好的 ActiveResource 调用输出组合和我们自己的日志记录使用 Rails.logger .

但是,我们需要将 ActiveRecord 添加回我们的应用程序,因为我们需要将 session 存储从 cookie 存储更改为 ActiveRecord 存储。并且由于重新添加 ActiveRecord,日志记录不再正常工作。

上一个日志输出:
Started GET "/audit/?key1=value1&key2=value2" for 0:0:0:0:0:0:0:1%0 at 2012-08-15 15:39:58 -0400
[15 Aug 15:39] INFO - Processing by AuditController#index as HTML
[15 Aug 15:39] INFO - Parameters: {"utf8"=>"✓", "key1"=>"value1", "key2"=>"value2"}
[15 Aug 15:39] INFO - GET http://localhost:2524/api/users/jeff/prefs/?label=language
[15 Aug 15:39] INFO - --> 200 OK 151 (55.0ms)
[15 Aug 15:39] WARN - There is no user currently logged in - retrieving default theme.
[15 Aug 15:39] INFO - GET http://localhost:2524/api/users/jeff/prefs/?label=theme
[15 Aug 15:39] INFO - --> 200 OK 151 (35.0ms)

注:我真正喜欢这种格式的是每个请求都以 Started GET <URL> 开头。或 POST 或 PUT 等 - 其次是哪个 Controller 和函数正在执行处理以及发送的参数是什么。这对调试非常有帮助。同样,这种格式允许我们打印出我们自己的 Rails.logger日志信息。

当前日志输出 (使用 ActiveRecord) :
[20 Aug 11:40]  INFO - GET http://localhost:2524/api/users/jeff
[20 Aug 11:40] INFO - --> 200 OK 199 (144.0ms)
[20 Aug 11:40] INFO - GET http://localhost:2524/api/users/jeff/prefs/?label=language
[20 Aug 11:40] INFO - --> 200 OK 148 (12.0ms)
[20 Aug 11:40] INFO - GET http://localhost:2524/api/users/jeff/prefs/?label=theme
[20 Aug 11:40] INFO - --> 200 OK 155 (15.0ms)

基本上我们现在得到的只是一个持续的 URL 调用流——它不记录来自 Rails.logger 的任何内容。并且不同的请求之间也没有分离——它实际上只是一个恒定的 URL 和响应流。

我试过设置 ActiveResource::Base.logger = ActiveRecord::Base.logger正如许多博客所推荐的那样,但这只会让事情变得更糟 - 它记录了几个 URL,然后完全停止记录,除非它处于 ERROR 级别(并且我没有设置日志级别,所以它应该仍然是默认值)

任何帮助或建议将不胜感激!!谢谢

最佳答案

关于ruby-on-rails - 使用 ActiveRecord 时 Rails 日志的格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12041350/

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