ruby-on-rails-3 - 在 Rails 中寻求更细粒度的日志记录选项。如何将整个请求和/或单个过滤器记录到备用日志文件中?

标签 ruby-on-rails-3

这是一个由两部分组成的问题,但可能有相同的答案。

第一部分: 在我们的应用程序中,一个特定的 Controller 受到很多的攻击——以至于我们希望将其记录在与所有其他请求分开的文件中。设置 FoosController.logger 不是我想要的,因为请求会执行一些具有记录器对象的 lib 文件和事件记录对象,并且 Rails 会在将控制权交给相关 Controller 之前记录一些信息。

第二部分: 我们的根 application_controller.rb 中包含一个全局 before 过滤器,它在大多数 Controller 的大多数操作之前运行。这个 before_filter 在日志中非常冗长,并且是将其所有日志信息发送到单独文件的候选者。这个 before 过滤器还调用库和 ActiveRecord 代码以及它们自己对记录器的引用。

一种可能的解决方案是将单个 Controller 作为其自己的独立应用程序运行。我还没有尝试过,因为它与应用程序的内部结构紧密相关。这种方法对 before_filter 也没有帮助。

是否有任何好的解决方案可以在 Rails 应用程序中进行更细粒度的日志记录?

谢谢!

最佳答案

第一部分 我建议创建您自己的记录器类(可能继承自 ruby​​ 记录器 (1),让记录器过滤掉请求 url,并根据该日志记录到特定文件。

第二部分 最简单的解决方案是为这些方法使用单独的记录器。您只需调用 method_logger.debug “您的消息”,而不是 logger.debug “您的消息”。

创建自己的记录器很简单,只需使用 ruby​​ 记录器类 (1) 即可。以下代码创建一个记录器,记录到 Rails 应用程序的日志目录中的 my_method.log 文件。

method_logger = Logger.new(Rails.root.join('logs','my_method.log')

然后,您可以使用以下命令写入日志,您应该对它很熟悉,因为 Rails 也使用 Ruby 记录器。

method_logger.debug "your debug message here"

(1) http://www.ruby-doc.org/stdlib-1.9.3/libdoc/logger/rdoc/Logger.html

关于ruby-on-rails-3 - 在 Rails 中寻求更细粒度的日志记录选项。如何将整个请求和/或单个过滤器记录到备用日志文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7822376/

相关文章:

ruby-on-rails-3 - 如何使用 ransack gem 搜索 Spree::Orders 和 associations

ruby-on-rails - Rails,渲染部分时,每个渲染都会在日志中输出。这是性能打击吗?

ruby-on-rails-3 - 使用 .all 与 where 查找全部

ruby-on-rails - 查询除具有此集合中 ID 的用户之外的所有用户

ruby-on-rails - Prawn 、 Prawn 和模板

ruby-on-rails - 带有 REST API 的 Ruby on Rails

ruby-on-rails - 为 has_one 关系接受使用 mongoid 的嵌套属性

ruby - Rails current_path helper ?

mysql - 如何在 Ruby 1.9.2 + Rails3 中将表数据导出为 CSV 文件?

ruby-on-rails-3 - 如何使用 Rspec Rails3 测试 accepts_nested_attributes_for