與標題相同:如何在運行rspec時將Rails.logger
打印到控制檯/ stdout?例如。如何在運行rspec時將Rails.logger打印到控制檯/ 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
了。
與標題相同:如何在運行rspec時將Rails.logger
打印到控制檯/ stdout?例如。如何在運行rspec時將Rails.logger打印到控制檯/ 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
了。
對於軌道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
您可以定義spec_helper.rb的方法發送消息既Rails.logger.info和看跌期權,並利用它來進行調試:
def log_test(message)
Rails.logger.info(message)
puts message
end
我希望的調用Rails.logger.info外在的東西,因爲我在使用Rails.logger.info,Rails.logger.debug,等我生產代碼。謝謝你的回答。 – s12chung 2012-08-02 03:47:31
我明白了。但爲什麼這會阻止你在測試中使用Rails.logger? – manglewood 2012-08-02 03:51:18
我也在測試中使用它。將所有內容打印到標準輸出,而不是使用尾部,這將會很好。 – s12chung 2012-08-02 04:00:49
,我喜歡,因爲它使rspec的一個解決方案輸出與實際軌單獨的日誌輸出,是做到以下幾點:
$ tail -f $RAILS_APP_DIR/logs/test.log
或tail -f $RAILS_APP_DIR\logs\test.log
爲窗口用戶如果你正在運行像的iTerm多窗格終端,這變得更加有趣,你有rspec
和test.log
輸出並排。
尾日誌爲background job(&),它將與rspec輸出交錯。
tail -f log/test.log &
bundle exec rspec
這是一個很好的解決方案。 – Gal 2015-05-29 23:08:50
對於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_level
:https://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
對於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
@tommes你可以發佈另一個答案,確切的文件名和你添加的代碼?我將修改我的答案以指定它適用於Rails 3.x. – 2015-09-16 21:18:18
完成! http://stackoverflow.com/a/32628272/1308089 – tommes 2015-09-17 10:54:09