2013-06-25 31 views
0

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

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

+0

我很难与rspec有关的任何事情记录在日志中;你希望这看起来像和/或做什么?根据其性质记录代码和需求特定; *你想记录什么?你将如何在*方法中去任意位置做“某事”? *包装*功能很简单,但尚不清楚这是否是你想要的。 –

+0

@Dave没有什么关于我正在寻找的功能,类似于RSpec;相似之处在于RSpec(或其他单元测试框架)通常用于构建与实际应用程序代码并行并在其上运行的代码“层”,只在需要运行单元测试时加载。日志/命令行输出层可以以类似的方式构建。如果它很重要,我目前想要记录的是多步数学计算中的中间步骤,但这确实是重点。 (继续) –

+0

@Dave我正在寻找一个框架/库,它提供了一个通用的解决方案,用于逻辑与报告的分离。是的,记录的内容是特定于代码的 - 但是记录指令与逻辑的分离不是。 –

回答

1

如果,例如,正在寻找使该代码只能在发展,那么您可以在轨道中添加一个初始化:/配置/初始化

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/

+0

感谢您的支持。当然,使用环境切换的加载类型是我计划的,但我没有使用Rails。我也很欣赏链接到包装方法。 –

相关问题