将语句放入调试

nde*_*eau 5 ruby debugging logging ruby-on-rails

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

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

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

Ars*_*en7 21

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

Rails.logger.debug "DEBUG: #{self.inspect} #{caller(0).first}" if Rails.logger.debug?
Run Code Online (Sandbox Code Playgroud)

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

tail -F log/development.log | grep DEBUG
Run Code Online (Sandbox Code Playgroud)

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

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

STDERR.puts "DEBUG: xyzzy"
Run Code Online (Sandbox Code Playgroud)

Rails中的大多数类(模型,控制器和视图)都有这个方法logger,所以如果可能的话,使用它而不是完整的Rails.logger.如果您使用的是旧版本的Rails,请使用常量RAILS_DEFAULT_LOGGER而不是Rails.logger.