Как получить рельсы.печать регистратора на консоль / stdout при запуске rspec?


то же, что и название: Как получить Rails.logger печать на консоль / stdout при запуске rspec? Например.

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

Я еще хочу!--1--> перейти к log/test.log тоже.

5 57

5 ответов:

для рельсов 4 см. этот ответ.

Для Рельсов 3.x, настроить регистратор в config/environments/test.rb:

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

это будет чередовать любые ошибки, которые регистрируются во время тестирования в STDOUT. Вы можете направить вывод на STDERR или использовать другой уровень журнала вместо этого.

отправка этих сообщений в консоль и файл журнала требует чего-то более надежного, чем встроенный Ruby регистратор класса. Этот лесозаготовки камень будет делать то, что вы хотите. Добавьте его в свой 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

Для Рельсов 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 at: 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

хвост журнала как фоновое задание ( & ) и он будет чередоваться с выходом rspec.

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

решение, которое мне нравится, потому что оно сохраняет выход rspec отдельно от фактического выхода журнала rails, заключается в следующем:

  • откройте второе окно терминала или вкладку и расположите его так, чтобы вы могли видеть как основной терминал, на котором вы запускаете rspec, так и новый.
  • запустите хвостовую команду во втором окне, чтобы вы увидели журнал rails в тестовой среде. По умолчанию это может быть как $ tail -f $RAILS_APP_DIR/logs/test.log или tail -f $RAILS_APP_DIR\logs\test.log для пользователей окно
  • выполнить ваши для RSpec люксы

если вы используете многопанельный терминал, такой как iTerm, это становится еще более увлекательным, и у вас есть rspec и test.log выходной стороны на сторону.

вы можете определить метод в spec_helper.rb, который отправляет сообщение обоим Rails.logger.info и чтобы поставить и использовать это для отладки:

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