将语句放入调试

时间:2011-09-06 07:03:29

标签: ruby-on-rails ruby debugging logging

当我编写代码时,我会非常强烈地使用“puts”语句进行调试。它允许我看看服务器中发生了什么。

当代码被调试时,我用来删除这些“puts”语句,我不知道是什么原因。

这是一个好主意还是我应该留下它们来更清楚地说明我的服务器日志?

3 个答案:

答案 0 :(得分:21)

您应该使用记录器而不是puts。使用这种陈述:

Rails.logger.debug "DEBUG: #{self.inspect} #{caller(0).first}" if Rails.logger.debug?

如果您想实时查看调试(几乎),只需在另一个终端窗口中使用tail命令:

tail -F log/development.log | grep DEBUG

然后您不需要在生产中删除这些语句,并且它们不会过多地降低性能,因为if logger.debug?将阻止(可能是昂贵的)构造消息字符串。

使用标准输出进行调试通常是一种不好的做法。如果您需要此类调试,请使用诊断STDERR,如:

STDERR.puts "DEBUG: xyzzy"

Rails中的大多数类(模型,控制器和视图)都使用方法logger,因此如果可能,请使用它而不是完整的Rails.logger。 如果您使用的是旧版本的Rails,请使用常量RAILS_DEFAULT_LOGGER代替Rails.logger

答案 1 :(得分:2)

答案 2 :(得分:1)

我使用专门设计的rails_dt gem来简化这种调试。

直接使用Rails.loggerputs有点麻烦,因为它要求您在调试消息周围放置大量装饰材料(DEBUG***等)使它们与常规的有用的消息不同。

此外,如果邮件似乎没有包含足够的可搜索字符,通常很难找到并解除由Rails.loggerputs生成的调试输出。

rails_dt打印原点(文件,行),因此在代码中查找位置很容易。此外,你永远不会将DT.p与任何东西混淆,它显然会调试输出而不是别的。

示例:

DT.p "Hello, world!"

# Sent to console, Rails log, dedicated log and Web page, if configured.
[DT app/controllers/root_controller.rb:3] Hello, world!

Gem可用here