3

ブール式に問題があり、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

... ? 私はfalseを見ることを期待しています。コンソールで「1 == 0」または「puts false」を実行すると、false になります。何か不足していますか?

「false」を印刷しないのはなぜですか?

Ruby バージョン: 1.8.7-p352

レールのバージョン: 2.3.2

4

2 に答える 2

5

Rails Logger は、 nil および false の場合に失敗する を||実行する前にコードで使用します。.to_s

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 に答える