【发布时间】:2011-11-11 01:53:05
【问题描述】:
在编写代码时,我会大量使用“puts”语句进行调试。它让我可以看到服务器中发生了什么。
在调试代码时,我使用删除这些“puts”语句,我不知道是什么原因。
这是一个好主意还是我应该保留它们以使我的服务器日志更加清晰?
【问题讨论】:
标签: ruby-on-rails ruby debugging logging
在编写代码时,我会大量使用“puts”语句进行调试。它让我可以看到服务器中发生了什么。
在调试代码时,我使用删除这些“puts”语句,我不知道是什么原因。
这是一个好主意还是我应该保留它们以使我的服务器日志更加清晰?
【问题讨论】:
标签: ruby-on-rails ruby debugging logging
我使用专门设计的 rails_dt gem 来简化此类调试。
直接使用Rails.logger 或puts 有点麻烦,因为它需要您在调试消息周围放置很多装饰性内容(DEBUG、*** 等),以使它们与常规消息不同,有用的信息。
此外,如果消息似乎没有包含足够的可搜索字符,则通常很难找到和消除由Rails.logger 或puts 生成的调试输出。
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。
【讨论】:
您应该使用记录器而不是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。
【讨论】: