2010-03-02 17 views
14

मैं रैक के माध्यम से एक sinatra ऐप चला रहा हूँ।रैक लॉग इन कहां है?

गतिविधि किस फ़ाइल को लॉग इन करती है? मैं लॉग फ़ाइल पथ कैसे सेट कर सकता हूं?

उत्तर

15

यह निर्भर करता है। कई डेवलपर्स अपनी ऐप लॉग फ़ाइल को ऐप/servername.log पर या केवल वर्तमान पथ पर परिभाषित करते हैं जहां रैक ऐप लोड होता है।

हाँ आप इसका मार्ग बदल सकते हैं। इस मामले लॉग फ़ाइल appdir/sinatra.log के नीचे स्थित है में

 
    log = File.new("sinatra.log", "a+") 
    $stdout.reopen(log) 
    $stderr.reopen(log) 

और/या

 
configure do 
    LOGGER = Logger.new("sinatra.log") 
    enable :logging, :dump_errors 
    set :raise_errors, true 
end 

:

आमतौर पर आप की तरह कुछ के साथ एक config.ru फ़ाइल मिलता है। लेकिन याद रखें कि यह कोड आपके रैक ऐप में कहीं भी हो सकता है, इसलिए कृपया अपनी एप्लिकेशन निर्देशिका में "लॉग" की तलाश करें।

 
$ cd projectname 
$ grep -ri 'log' * 

मज़ेदार हैं और यहां अपनी config.ru और/या mainprojectfile.rb पोस्ट करें।

+0

हाय फ्रांसिस्को। हाँ, यह मेरे लिए सही काम करता है। log_path = "<पथ करने वाली लॉग-फ़ाइल>" लकड़हारा = Logger.new (log_path, "दैनिक") लॉग = File.new (log_path, "एक +") STDOUT.reopen (लॉग इन करें) STDERR .reopen (लॉग) –

+0

@ शामिल: क्या कोई तरीका है कि मैं उत्पादन और विकास वातावरण फाइलों पर लॉग इन कर सकता हूं लेकिन टर्मिनल पर परीक्षण लॉग कर सकता हूं? ऐसा लगता है कि जब मैं '$ stdout' और' $ stderr' फिर से खोलता हूं, तो यह परीक्षण आउटपुट को फ़ाइलों पर भी रीडायरेक्ट करता है। –

+1

एसटीडीओयूटी को फिर से खोलने से यात्री शुरू नहीं हो सकता है: https://github.com/phusion/passenger/wiki/Debugging-plication-startup-problems – fguillen

-2

object_id प्रारंभ में वही हैं लेकिन $stderr को असाइन करना बेहतर है। ,

$ irb 
>> $stderr.object_id == STDERR.object_id 
=> true 

एक ही वस्तु अब के लिए: यह भी आप जहां यह STDERR साथ मूल रूप से था करने के लिए धारा वापस जाने के लिए खुला छोड़कर। , कहीं यह भेजें

>> $stderr = File.open('/tmp/foo', 'w') 
=> #<File:/tmp/foo> 
>> $stderr.puts "Uh-oh, foo" 
=> nil 
>> $stderr.flush # if you want to verify its output 
=> #<File:/tmp/foo> 
>> $stderr.object_id == STDERR.object_id 
=> false 

$stderr और STDERR विभिन्न वस्तुओं को देखें। STDERR अभी भी टर्मिनल यहाँ स्ट्रीम करता है,

>> STDERR.puts "Uh-oh, original STDERR" 
Uh-oh, original STDERR 
=> nil 

पुनर्स्थापित $stderr,

>> $stderr = STDERR 
=> #<IO:0x106fddb88> 
>> $stderr.object_id == STDERR.object_id 
=> true 

और हम वापस आ गए!

संबंधित मुद्दे