Почему «logger.debug false» ничего не печатает? - PullRequest
3 голосов
/ 15 августа 2011

У меня проблема с логическим выражением, и когда я выполнил 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' или 'ставит false' в консоли, я получаю false.Я что-то упустил?

Есть идеи, почему не печатается «ложь»?

ruby ​​версия: 1.8.7-p352

rails версия: 2.3.2

Ответы [ 2 ]

5 голосов
/ 15 августа 2011

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)
2 голосов
/ 15 августа 2011

У регистратора где-то есть условие (if value), которое не выполняется для nil и false.Вы хотите logger.debug value.inspect.

...