如何在Ruby应用程序中分离核心逻辑和日志代码?

时间:2013-06-25 21:04:34

标签: ruby logging

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

要覆盖User模型上的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/