Program Tip

rspec을 실행할 때 Rails.logger에서 콘솔 / stdout으로 인쇄하는 방법은 무엇입니까?

programtip 2020. 11. 3. 18:51
반응형

rspec을 실행할 때 Rails.logger에서 콘솔 / stdout으로 인쇄하는 방법은 무엇입니까?


제목과 동일 : Rails.loggerrspec을 실행할 때 콘솔 / stdout에 인쇄 하는 방법은 무엇입니까? 예 :

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의 경우이 답변을 참조하십시오 .

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

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#L70config.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

로그를 백그라운드 작업 (&)으로 추적하면 rspec 출력과 인터리브됩니다.

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

내가 좋아하는 솔루션은 rspec 출력을 실제 레일 로그 출력과 별도로 유지하기 때문에 다음을 수행하는 것입니다.

  • 두 번째 터미널 창 또는 탭을 열고 rspec을 실행중인 기본 터미널과 새 터미널을 모두 볼 수 있도록 정렬합니다.
  • 두 번째 창에서 tail 명령을 실행하여 테스트 환경에서 rails 로그를 확인합니다. 기본적으로 이것은 Windows 사용자 와 비슷 $ tail -f $RAILS_APP_DIR/logs/test.log하거나tail -f $RAILS_APP_DIR\logs\test.log
  • rspec 제품군 실행

당신이 사용하여 ITerm 같은 다중 창 터미널을 실행하는 경우,이 훨씬 더 재미되고, 당신은 rspectest.log나란히 출력측.


당신은 메시지를 Rails.logger.info로 보내고 디버깅을 위해 그것을 넣어서 사용하는 spec_helper.rb에 메소드를 정의 할 수 있습니다 :

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

참고 URL : https://stackoverflow.com/questions/11770552/how-to-get-rails-logger-printing-to-the-console-stdout-when-running-rspec

반응형