タイトルと同じ: Rails.logger
rspec の実行時にコンソール/標準出力に出力するにはどうすればよいですか? 例えば。
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
rspec の実行時にコンソール/標準出力に出力するにはどうすればよいですか? 例えば。
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 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
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
バックグラウンド ジョブ(&)としてログを追跡すると、rspec 出力とインターリーブされます。
tail -f log/test.log &
bundle exec rspec
Rails.logger.info と puts の両方にメッセージを送信し、それをデバッグに使用するメソッドを spec_helper.rb で定義できます。
def log_test(message)
Rails.logger.info(message)
puts message
end