在ruby中为许多方法添加额外日志记录的最有效方法是什么?

时间:2016-03-17 17:47:50

标签: ruby

我有一个普通的ruby应用程序,我希望在调试模式下实现一个选项来启动应用程序,在此我向所有数据库查询方法添加额外的日志记录,输出查询字符串和所用的时间。

在调试模式下启动时,全局变量$ debug_mode将设置为true。

我的第一个想法是创建一个方法,它接受一段代码并记录适当的数据,基本上是:

def debug(query_string)
  if $debug_mode
    start_time = Time.now
    yield
    time_elapsed = Time.now - start_time
    log time_elapsed
    log query_string
  else
    yield
  end
end

然后,使用此方法包装我想要输出其他日志记录的每个代码块。

一些担忧:

  • 这看起来很难看,感觉就像糟糕的设计
  • 由于这些方法是数据库查询,因此它们将被大量调用。我担心即使没有在调试模式下启动也可能会有额外的开销,因为每个方法的每次调用都有条件

我不禁感到有更好的方法来实现这一目标。

非常感谢任何提示和建议。

谢谢。

1 个答案:

答案 0 :(得分:2)

不要担心条件将花费额外的时间,SQL查询会使任何差异相形见绌。如果你关心速度,你应该用C语言写作,而不是红宝石。

这只是很好的设计,我唯一要改变的是使用$DEBUG代替$debug_mode,因为$DEBUG can be set from the command line已经是标准。

此外,您可能在某些时候想要收益率的结果,因此您可以执行以下操作:

def debug(query_string)
  if $DEBUG
    start_time = Time.now
    result = yield
    time_elapsed = Time.now - start_time
    log time_elapsed
    log query_string
    return result
  else
    return yield
  end
end