Как получить Rails.logger печать на консоль /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"
Мне еще нужно Rails.logger
перейти в log/test.log
.
Ответы
Ответ 1
Для Rails 4 см. этот ответ.
Для Rails 3.x настройте регистратор в config/environments/test.rb
:
config.logger = Logger.new(STDOUT)
config.logger.level = Logger::ERROR
Это будет чередовать любые ошибки, которые регистрируются во время тестирования в STDOUT. Вы можете перенаправить вывод в STDERR или использовать другой уровень журнала.
Отправка этих сообщений на консоль, а файл журнала требует чего-то более надежного, чем встроенный класс Logger 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
Ответ 2
Для 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
Ответ 3
Хвост журнала как фоновое задание (&) и будет чередоваться с выходом rspec.
tail -f log/test.log &
bundle exec rspec
Ответ 4
Решение, которое мне нравится, потому что он сохраняет вывод rspec отдельно от фактического вывода журнала rails, заключается в следующем:
- Откройте второе окно терминала или вкладку и расположите его так, чтобы вы могли видеть как основной терминал, на котором вы используете rspec, так и новый.
- Запустите команду хвоста во втором окне, чтобы вы увидели, что рельсы регистрируются в тестовой среде. По умолчанию это может быть как
$ tail -f $RAILS_APP_DIR/logs/test.log
или tail -f $RAILS_APP_DIR\logs\test.log
для пользователей Windows
- Запустите ваши пакеты rspec
Если вы используете многопанельный терминал, такой как iTerm, это становится еще более увлекательным, и у вас есть rspec
и test.log
выходные бок о бок.
Ответ 5
Вы можете определить метод в spec_helper.rb, который отправляет сообщение как Rails.logger.info, так и помещает и использует это для отладки:
def log_test(message)
Rails.logger.info(message)
puts message
end