2012-08-02 7 views
42

शीर्षक के समान: Rails.logger rspec चलाते समय कंसोल/stdout पर प्रिंट कैसे करें? उदाहरण के लिए।rspec चलाते समय कंसोल/stdout पर Rails.logger प्रिंटिंग कैसे प्राप्त करें?

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

मैं अभी भी Rails.loggerlog/test.log भी जाना चाहते हैं।

उत्तर

44

रेल 4 के लिए, config/environments/test.rb में this answer.

रेल 3.x के लिए देखते हैं, एक लकड़हारा कॉन्फ़िगर करें:

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

यह किसी भी त्रुटि लॉग ऑन हैं कि बिछा होगा STDOUT करने के लिए परीक्षण के दौरान । आप आउटपुट को STDERR पर रूट करना चाहते हैं या इसके बजाय एक अलग लॉग स्तर का उपयोग कर सकते हैं।

दोनों सांत्वना और एक लॉग फ़ाइल को ये संदेश भेजा जा रहा है रूबी की अंतर्निहित लॉगर वर्ग से अधिक मजबूत कुछ की आवश्यकता है। logging मणि जो आप चाहते हैं वह करेगा। यह आपके Gemfile में जोड़े, तो config/environments/test.rb में दो appenders की स्थापना:

logger = Logging.logger['test'] 
logger.add_appenders(
    Logging.appenders.stdout, 
    Logging.appenders.file('example.log') 
) 
logger.level = :info 
config.logger = logger 
+0

रेल के लिए 4.2.1, मुझे कॉन्फ़िगरेशन में लॉग स्तर सेट करना था, क्योंकि इसे लॉगर इंस्टेंस पर 'bootstrap.rb' में ओवरराइट किया जा रहा था: https://github.com/rails/rails/blob/v4। 2.4/रेल/lib/rails/application/bootstrap.rb # L70 लॉग स्तर इस प्रकार सेट किया गया था: 'config.log_level =: ERROR' – tommes

+0

@tommes क्या आप सही फ़ाइल नाम और कोड के साथ एक और उत्तर पोस्ट कर सकते हैं? रेलवे 3.x के लिए निर्दिष्ट करने के लिए मैं अपना उत्तर संशोधित करूंगा। –

+0

किया गया! http://stackoverflow.com/a/32628272/1308089 – tommes

7

आप spec_helper.rb में एक विधि दोनों Rails.logger.info करने और पुट को संदेश भेजता है कि परिभाषित करने और उपयोग करें कि डीबगिंग के लिए कर सकते हैं:

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

मैं Rails.logger.info बुला लिए बाहरी कुछ के लिए उम्मीद कर रही थी क्योंकि मैं में Rails.logger.info, Rails.logger.debug, आदि का उपयोग अपने उत्पादन कोड हालांकि उत्तर देने के लिए धन्यवाद। – s12chung

+0

मैं देखता हूं। लेकिन यह आपको अपने परीक्षणों में Rails.logger का उपयोग करने से क्यों रोकता है? – manglewood

+0

मैं इसे अपने परीक्षणों में भी उपयोग करता हूं। पूंछ का उपयोग करने के बजाय, सबकुछ stdout पर प्रिंट करना अच्छा लगेगा। – s12chung

18

एक समाधान है जो मुझे पसंद है, क्योंकि यह rspec रहता है

  • खुला एक दूसरे टर्मिनल विंडो या टैब, और यह व्यवस्था इतनी है कि आप दोनों मुख्य टर्मिनल देख सकते हैं आप के रूप में पर rspec चला रहे हैं और साथ ही: उत्पादन वास्तविक रेल से अलग लोग इन उत्पादन, निम्न कार्य करने के लिए है नया।
  • दूसरी विंडो में पूंछ कमांड चलाएं ताकि आप परीक्षण वातावरण में रेल लॉग देख सकें। डिफ़ॉल्ट रूप से यह
  • भागो अपने rspec सुइट्स

आप iTerm की तरह एक बहु फलक टर्मिनल चला रहे हैं $ tail -f $RAILS_APP_DIR/logs/test.log या tail -f $RAILS_APP_DIR\logs\test.log विंडो उपयोगकर्ताओं के लिए की तरह हो सकता है, यह और भी अधिक मज़ा हो जाता है और आप rspec है और test.log उत्पादन साथ साथ।

26

background job (&) के रूप में लॉग को भरें और यह rspec आउटपुट के साथ interleave होगा।

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

यह एक साफ समाधान है। – Gal

44

रेल के लिए 4.x लॉग स्तर एक सा में की तुलना में अलग कॉन्फ़िगर किया गया है रेल 3।एक्स

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 
संबंधित मुद्दे