我正在寻找一种在Ruby应用程序的代码库中维护核心逻辑和日志/调试/终端输出代码分离的通用方法。理想情况下,我希望有一个单独的“跟踪器”代码库,与我的应用程序核心(典型的Ruby项目中的“lib”目录)平行。跟踪代码将存在于一个特殊目录(可能称为“跟踪”)中,其方式与单元测试通常位于test / spec目录中的并行结构中的方式相同。跟踪器文件将使用各种方法的包装器扩展目标类。这些包装器可以执行诸如写入日志,设置断点(例如使用pry的'binding.pry
)或在方法返回时递增进度条等操作。然后可以通过单个开关控制跟踪器代码的加载。
我做了一些研究,大部分空白。我发现了一些我想要的功能;例如,标准库的Tracer类和method_decorators gem。但我想知道有一个更完整的解决方案,类似于rspec进行测试。这样的事情存在吗?或者是否有其他方法可以解决这个问题?
答案 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/