यह स्क्रिप्ट o.rb
नाम है:STDOUT को लॉगर आउटपुट फ़ाइलों पर रीडायरेक्ट क्यों नहीं किया जाता है?
@logger = Logger.new(STDOUT)
@logger.info "start_time : #{start_time}"
जब मैं ./o.rb
का उपयोग कर इसे चलाने के लिए, कंसोल पर उत्पादन सही है।
हालांकि, जब मैंने ./o.rb > log.txt 2>&1
की कोशिश की, तो लॉग फ़ाइल खाली है!
ऐसा क्यों हुआ?
सरल puts
फ़ंक्शन का उपयोग करते समय मुझे एक ही समस्या है।
अद्यतन
यह इस समस्या को पुनः होगा:
require 'logger'
logger = Logger.new(STDOUT)
loop do
logger.info "This is a test haha"
sleep(1)
end
जब मैं ./foo.rb
का उपयोग कर इसे चलाने के लिए, यह सांत्वना उत्पादन के लिए सही ढंग से लिखते हैं।
जब मैं ./foo.rb > log.txt
चलाता हूं, मुझे कुछ भी नहीं मिलता है।
इसके अलावा, जब मैं ./foo.rb | tee log.txt
का उपयोग करता हूं, तो कंसोल पर कुछ भी नहीं लिखा जाता है और लॉग फ़ाइल खाली होती है।
log.txt फ़ाइल बनाई गई थी लेकिन खाली बनी हुई है।
मेरा रूबी संस्करण 1.8.7 है।
मेरे लिए काम करता है ... – sarnold
मेरा प्रोग्राम 1 दिन तक चल रहा है, क्या यह फाइल बफर के कारण नहीं है? अभी मैं एक साधारण स्क्रिप्ट लिखता हूं जो केवल एक वाक्य आउटपुट करता है और प्रोग्राम से बाहर निकलता है, यह काम करता है। – nttstar
मुझे नहीं लगता कि यह बफरिंग है; ['लॉगडिवाइस :: नया'] (http://www.ruby-doc.org/stdlib-1.9.3/libdoc/logger/rdoc/Logger/LogDevice.html#method-c-new) कॉल [' @dev .sync = true'] (http://www.ruby-doc.org/core-1.9.3/IO.html#method-i-sync-3D) - जो अनबफर किए गए ऑपरेशन के लिए पूछता है। – sarnold