2012-08-02 5 views
42

タイトルと同じ:Rails.logger rspecの実行時にconsole/stdoutに印刷するには?例えば。rspecを実行しているときに、Rails.loggerの印刷をconsole/stdoutに行う方法は?

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に行きたいです。

あなたがRails.logger.infoへとプットの両方にメッセージを送信しspec_helper.rbでメソッドを定義し、デバッグのためにそれを使用することができます

答えて

44

config/environments/test.rbにロガーを設定し、Railsの3.xのthis answer.

を参照してください。

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

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

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

logger = Logging.logger['test'] 
logger.add_appenders(
    Logging.appenders.stdout, 
    Logging.appenders.file('example.log') 
) 
logger.level = :info 
config.logger = logger 
+0

rails 4.2.1では、loggerインスタンスの 'bootstrap.rb'で上書きされていたconfigのログレベルを設定しなければなりませんでした:https://github.com/rails/rails/blob/v4。 2.4/railties/lib/rails/application/bootstrap.rb#L70ログレベルは次のように設定されました: 'config.log_level =:ERROR' – tommes

+0

@tommes正確なファイル名とコードを追加して別の回答を投稿できますか?自分の答えを変更してRails 3.x用に指定します。 –

+0

完了! http://stackoverflow.com/a/32628272/1308089 – tommes

7

def log_test(message) 
    Rails.logger.info(message) 
    puts message 
end 
+1

私は私の中などRails.logger.info、Rails.logger.debugを、使用しているため、私はRails.logger.infoを呼び出す外部の何かを期待していました生産コード。答えてくれてありがとう。 – s12chung

+0

私は参照してください。しかし、なぜあなたはあなたのテストでRails.loggerを使用するのを止めますか? – manglewood

+0

私は私のテストでもそれを使用します。 tailを使うのではなく、すべてをstdoutに出力するのは良いことです。 – s12chung

18

それはRSpecのを保持しますので、私は、好きなソリューション

  • 開いた第2ターミナルウィンドウまたはタブ、そしてあなたが上のRSpecのと同様に実行しているメインターミナルの両方を見ることができるように、それをアレンジ:実際のレールとは別の出力は、ログ出力を、次のことを行うことです新しいもの
  • 2番目のウィンドウでtailコマンドを実行すると、テスト環境でレールがログに記録されます。デフォルトでは、これは
  • 実行して、あなたのRSpecのスイート

あなたがITERMのようなマルチペインターミナルを実行している場合はウィンドウのユーザーのための$ tail -f $RAILS_APP_DIR/logs/test.logまたはtail -f $RAILS_APP_DIR\logs\test.logようにすることができ、これがさらに楽しくなり、あなたはrspec持っているとtest.log出力並んで。

26

ログをbackground job(&)としてテールし、rspec出力とインターリーブします。 Railsの4のために

tail -f log/test.log & 
bundle exec rspec 
+4

これはきちんとした解決策です。 – Gal

44

は、ログレベルがよりも異なるビットが設定されている4.xのレール3。あなたが上書きできるようにすることができ、ボーナスとして変数https://github.com/rails/rails/blob/v4.2.4/railties/lib/rails/application/bootstrap.rb#L70

環境

:X

config/environment/test.rb

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

# Set log level 
config.log_level = :ERROR 

ロガーのレベルがで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 
関連する問題