90

タイトルと同じ: Rails.loggerrspec の実行時にコンソール/標準出力に出力するにはどうすればよいですか? 例えば。

Rails.logger.info "I WANT this to go to console/stdout when rspec is running"
puts "Like how the puts function works"

私もまだまだRails.logger行きたいですlog/test.log

4

6 に答える 6

88

Rails 4.x の場合、ログ レベルは Rails 3.x とは少し異なります。

これを追加config/environment/test.rb

# Enable stdout logger
config.logger = Logger.new(STDOUT)

# Set log level
config.log_level = :ERROR

ロガー レベルは、 https://github.com/rails/rails/blob/v4.2.4/railties/lib/rails/application/bootstrap.rb#L70 からロガー インスタンスに設定されconfig.log_levelます

環境変数

おまけとして、次のようなデフォルト値を持つ環境変数を使用して、ログ レベルを上書きできるようにすることができます。

# default :ERROR
config.log_level = ENV.fetch("LOG_LEVEL", "ERROR")

そして、シェルからテストを実行します:

# Log level :INFO (the value is uppercased in bootstrap.rb)
$ LOG_LEVEL=info rake test

# Log level :ERROR
$ rake test
于 2015-09-17T10:36:47.243 に答える
75

Rails 4 については、この回答を参照してください。

Rails 3.x の場合、次のようにロガーを構成しますconfig/environments/test.rb

config.logger = Logger.new(STDOUT)
config.logger.level = Logger::ERROR

これにより、テスト中にログに記録されたすべてのエラーが STDOUT にインターリーブされます。出力を STDERR にルーティングするか、代わりに別のログ レベルを使用することをお勧めします。

これらのメッセージをコンソールとログ ファイルの両方に送信するには、Ruby の組み込みのLoggerクラスよりも堅牢なものが必要です。logging gem は、あなたが望むことを行います。それを に追加してから、Gemfileに 2 つのアペンダーを設定しconfig/environments/test.rbます。

logger = Logging.logger['test']
logger.add_appenders(
    Logging.appenders.stdout,
    Logging.appenders.file('example.log')
)
logger.level = :info
config.logger = logger
于 2014-01-31T21:59:52.570 に答える
35

バックグラウンド ジョブ(&)としてログを追跡すると、rspec 出力とインターリーブされます。

tail -f log/test.log &
bundle exec rspec
于 2013-12-23T21:32:38.533 に答える
8

Rails.logger.info と puts の両方にメッセージを送信し、それをデバッグに使用するメソッドを spec_helper.rb で定義できます。

def log_test(message)
    Rails.logger.info(message)
    puts message
end
于 2012-08-02T03:42:44.537 に答える