क्या प्रत्येक रूचि के बाद मानक रूबी लॉगर (यानी ::Logger
) ऑटो-फ्लश के लिए यह संभव है?मानक रूबी लॉगर प्रत्येक संदेश के बाद फ्लश करने के लिए कॉन्फ़िगर किया जा सकता है?
अद्यतन: मैं प्रति How to get timestamps in your ruby on rails logs के रूप में, एक कस्टम लॉग फ़ॉर्मेटर की स्थापना कर रहा हूँ:
def initialize(params = {})
Rails.logger.auto_flushing = 1
@logger = Logger.new $stdout
@logger.formatter = LogFormatter.new
@logger.level = params.include?(:log) ? params[:log] : Logger::INFO
end
लेकिन कोई पासा:
class Foo
def initialize(params = {})
@logger = Logger.new $stdout
@logger.formatter = LogFormatter.new
@logger.level = params.include?(:log) ? params[:log] : Logger::INFO
# ...
end
class LogFormatter < Logger::Formatter
def call(severity, time, progname, message)
timestamp = time.iso8601
log_msg = "#{timestamp}#{" [#{severity}]" if %w{ERROR WARN}.include? severity} "
if message.is_a? Exception
log_msg += "#{message.message}"
log_msg += ": #{message.backtrace.join "\n#{timestamp} "}" unless message.backtrace.blank?
else
log_msg += message
end
"#{log_msg}\n"
end
end
end
मैं इस प्रकार idlefingers से सुझाव का उपयोग करने की कोशिश की। न तो @logger.auto_flushing = 1
मेरे लिए काम करता है। मैं क्या गलत कर रहा हूं?
अद्यतन: ऐसा लगता है कि ActiveSupport के ::Logger
बस मानक रूबी ::Logger
गिर्द घूमती है। तो मेरा सवाल रूबी के बारे में और रेल नहीं है, आखिरकार।
मेरे लिए काम नहीं करता है (सवाल का मेरे अद्यतन देखें)। –
यह रेल लॉगर (और आपका मूल प्रश्न) से बिल्कुल अलग है। मैं अपने सिर के शीर्ष से निश्चित नहीं हूं कि stdout का उपयोग कर कस्टम लॉग के साथ ऐसा कैसे करें। फ़ाइल लॉगिंग के लिए आप [io.sync = true] (http://www.ruby-doc.org/core/classes/IO.html#M000911) का उपयोग कर सकते हैं, लेकिन आपको इसे stdout लॉगिंग के लिए Google करना होगा। – idlefingers
आह, ठीक है। मैंने सोचा कि लॉगर * मानक रेल लॉगर था। : -/ –