2012-08-02 111 views

回答

44

對於軌道4,看this answer.

對於Rails開發3.x中,配置在記錄器config/environments/test.rb

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

這將交織所記錄的任何錯誤檢測到標準輸出中。您可能希望將輸出路由到STDERR或使用其他日誌級別。

將這些消息發送到控制檯和日誌文件需要比Ruby的內置Logger類更強大的功能。 logging寶石會做你想做的。將它添加到您的Gemfile,然後成立了兩個附加目的地在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 
+0

對於rails 4.2.1,我必須在配置中設置日誌級別,因爲它在logger實例的'bootstrap.rb'中被覆蓋:https://github.com/rails/rails/blob/v4。 2.4/railties/lib/rails/application/bootstrap.rb#L70日誌級別設置如下:'config.log_level =:ERROR' – tommes 2015-09-16 09:26:47

+0

@tommes你可以發佈另一個答案,確切的文件名和你添加的代碼?我將修改我的答案以指定它適用於Rails 3.x. – 2015-09-16 21:18:18

+0

完成! http://stackoverflow.com/a/32628272/1308089 – tommes 2015-09-17 10:54:09

7

您可以定義spec_helper.rb的方法發送消息既Rails.logger.info和看跌期權,並利用它來進行調試:

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

我希望的調用Rails.logger.info外在的東西,因爲我在使用Rails.logger.info,Rails.logger.debug,等我生產代碼。謝謝你的回答。 – s12chung 2012-08-02 03:47:31

+0

我明白了。但爲什麼這會阻止你在測試中使用Rails.logger? – manglewood 2012-08-02 03:51:18

+0

我也在測試中使用它。將所有內容打印到標準輸出,而不是使用尾部,這將會很好。 – s12chung 2012-08-02 04:00:49

18

,我喜歡,因爲它使rspec的一個解決方案輸出與實際軌單獨的日誌輸出,是做到以下幾點:

  • 打開第二個終端窗口或標籤,並安排它,這樣你可以同時看到主終端所運行rspec的還有新的一個。
  • 在第二個窗口中運行tail命令,以便您可以看到測試環境中的rails日誌。默認情況下,這可能是像$ tail -f $RAILS_APP_DIR/logs/test.logtail -f $RAILS_APP_DIR\logs\test.log爲窗口用戶
  • 運行你的rspec的套房

如果你正在運行像的iTerm多窗格終端,這變得更加有趣,你有rspectest.log輸出並排。

26

尾日誌爲background job(&),它將與rspec輸出交錯。

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

這是一個很好的解決方案。 – Gal 2015-05-29 23:08:50

44

對於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 

記錄儀一級是設在記錄器實例從config.log_levelhttps://github.com/rails/rails/blob/v4.2.4/railties/lib/rails/application/bootstrap.rb#L70

環境變量

作爲獎勵,你可以允許覆蓋使用具有默認值的環境變量的日誌級別,如下所示:

# 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 
相關問題