3

我在使用布尔表达式时遇到了问题,当我执行 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'时,我得到了错误。我错过了什么吗?

有什么想法为什么不打印“假”?

红宝石版本:1.8.7-p352

导轨版本:2.3.2

4

2 回答 2

5

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)
于 2011-08-15T14:47:45.953 回答
2

记录器在某处 ( ) 有一个条件if value,它在 nil 和 false 时失败。你想要logger.debug value.inspect

于 2011-08-15T14:42:40.473 回答