0

我正在寻找一种通用方法来在 Ruby 应用程序的代码库中保持核心逻辑和日志记录/调试/终端输出代码的分离。理想情况下,我希望有一个与我的应用程序核心(典型 Rub​​y 项目中的“lib”目录)平行的单独“跟踪器”代码库。跟踪代码将存在于一个特殊的目录(可能称为“trace”)中,就像单元测试通常存在于 test/spec 目录中的并行结构中一样。Tracer 文件将使用各种方法的包装器扩展目标类。这些包装器将执行诸如写入日志、设置断点(例如使用pry 's' binding.pry)或在方法返回时增加进度条之类的操作。然后可以通过单个开关控制跟踪代码的加载。

我做了一些研究,大部分都是空白的。我找到了一些我想要的功能;例如,标准库的Tracer类和method_decorators gem。但我想知道那里有一个更完整的解决方案,类似于 rspec 用于测试。这样的事情存在吗?或者是否有其他方法可以解决这个问题?

4

1 回答 1

1

例如,如果您正在考虑仅在开发中启用此代码,那么您可以在 rails 中添加一个初始化程序:/config/initializers

if( Rails.env.development?)
  require "logging_wrappers"
end

在您的lib/文件夹中,您可以将扩展添加到 lib/logging_wrappers.rb

要覆盖用户模型上的 find_by_id 函数,只需添加以下内容:

class User
  alias_method :unlogged__find_by_id, :find_by_id

  def find_by_id(id)
    Rails.logger.info "About to find by id"
    x = unlogged__find_by_id(id)
    if (x.blank?)
      Rails.logger.info "We didn't find any users"
    end
  end

有关此技术的更多信息,可以在以下位置找到几个很好的示例:http: //yehudakatz.com/2009/01/18/other-ways-to-wrap-a-method/

于 2013-06-25T21:43:26.747 回答