【问题标题】:Why isn't 'logger.debug false' printing anything?为什么'logger.debug false'不打印任何东西?
【发布时间】:2011-10-27 07:48:01
【问题描述】:

我在使用布尔表达式时遇到了问题,当我执行 logger.debug 时,我得到了奇怪的结果,因此我将日志记录代码简化为以下代码,并且很惊讶没有看到任何“错误”被打印出来。

在我的控制器中记录代码:

logger.debug 'true'
logger.debug true
logger.debug
logger.debug 'false'
logger.debug false
logger.debug
logger.debug '1 == 1'
logger.debug 1 == 1
logger.debug
logger.debug '1 == 0'
logger.debug 1 == 0

打印出以下内容

true
true

false


1 == 1
true

1 == 0

... ?我希望看到假的。当我在控制台中运行'1 == 0'或'puts false'时,我得到了错误。我错过了什么吗?

任何想法为什么不打印'false'?

红宝石版本:1.8.7-p352

rails 版本:2.3.2

【问题讨论】:

    标签: ruby-on-rails ruby ruby-1.8 ruby-on-rails-2


    【解决方案1】:

    Rails Logger 在运行.to_s 之前在代码中使用||,它会因nil 和false 而失败。

    https://github.com/rails/rails/blob/master/activesupport/lib/active_support/buffered_logger.rb#L65

    def add(severity, message = nil, progname = nil, &block)
      return if @level > severity
      message = (message || (block && block.call) || progname).to_s ## <- this line
      # If a newline is necessary then create a new message ending with a newline.
      # Ensures that the original message is not mutated.
      message = "#{message}\n" unless message[-1] == ?\n
      buffer << message
      auto_flush
      message
    end
    

    您可以这样做:

    logger.debug( false.to_s)
    

    【讨论】:

    • 'logger.debug (1 == 0).to_s' 不打印任何内容。
    • logger.debug((1 == 0).to_s) 怎么样?
    【解决方案2】:

    Logger 在某处 (if value) 遇到了一个条件,该条件因 nil 和 false 而失败。你想要logger.debug value.inspect

    【讨论】:

    • 所以应该是 'logger.debug (false).inspect' ?我对你的理解正确吗?因为那也不会打印任何内容。
    • 没关系。 'logger.debug false.inspect' 工作正常。括号是用来表达的。谢谢+1
    • 供将来参考 'logger.debug( (1 == 0).inspect)' 有效。
    猜你喜欢
    • 2012-12-30
    • 2014-07-03
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    • 2013-04-06
    • 2019-05-18
    相关资源
    最近更新 更多