it-roy-ru.com

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

67
s12chung

Для Rails 4 см. этот ответ.

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

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

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

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

Для 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#L7 знак равно

Переменная среды

В качестве бонуса вы можете разрешить перезаписывать уровень журнала, используя переменную среды со значением по умолчанию, например:

# default :ERROR
config.log_level = ENV.fetch("LOG_LEVEL", "ERROR")

А затем запускаем тесты из Shell:

# Log level :INFO (the value is uppercased in bootstrap.rb)
$ LOG_LEVEL=info rake test

# Log level :ERROR
$ rake test
61
tommes

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

tail -f log/test.log &
bundle exec rspec
29
Jared Beck

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

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

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

20
Shyam Habarakada

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

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