【问题标题】:puts statements for debugputs 语句进行调试
【发布时间】:2011-11-11 01:53:05
【问题描述】:

在编写代码时,我会大量使用“puts”语句进行调试。它让我可以看到服务器中发生了什么。

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

这是一个好主意还是我应该保留它们以使我的服务器日志更加清晰?

【问题讨论】:

    标签: ruby-on-rails ruby debugging logging


    【解决方案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

    【讨论】:

      【解决方案2】:

      您应该使用记录器而不是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

      【讨论】:

      • 谢谢,我显然需要仔细查看记录器... ;-)
      【解决方案3】:
      猜你喜欢
      • 1970-01-01
      • 2015-07-27
      • 2011-09-28
      • 2014-03-10
      • 1970-01-01
      • 2022-10-21
      • 1970-01-01
      • 1970-01-01
      • 2020-04-07
      相关资源
      最近更新 更多