Подтвердить что ты не робот

Как получить 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.

4b9b3361

Ответ 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