我遇到布尔表达式的问题,当我做了一个logger.debug时,我得到了奇怪的结果,所以我把我的日志代码简化为以下内容,并且很惊讶没有看到任何'false'被打印。
在我的控制器中记录代码:
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'或'put false'时,我得到了错误。我错过了什么吗?
任何想法为什么不打印'假'?
ruby版本:1.8.7-p352
rails版本:2.3.2
答案 0 :(得分: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)
答案 1 :(得分:2)
记录器在某处(if value
)有一个条件,该条件因nil和false而失败。你想要logger.debug value.inspect
。