में कॉलर का मॉड्यूल प्राप्त करना हमारे पास हमारे रूबी 1.8.6 वेब एप्लिकेशन में डेटा लॉग करने के लिए कोड है। आप इसे मोटे तौर पर फोन इस प्रकार है:रूबी
$log.info("Some text here")
अब, लॉग इन उत्पादन में, मैं मॉड्यूल जहां कि लाइन दिखाई दिया शामिल करना चाहते हैं। मुझे पता है कि Kernel#caller
मुझे एक सरणी देगा जहां मैं लॉग लाइन होने वाली फ़ाइल और लाइन नंबर खींच सकता हूं, लेकिन मुझे वह नहीं चाहिए। मैं मॉड्यूल चाहता हूं, फाइल का नाम नहीं। स्पष्ट समाधान लॉग लाइन को संशोधित करना है ताकि यह पढ़ सके:
$log.info("Some text here", self.class.name)
और फिर परिणाम का विश्लेषण करें। यह काम नहीं करेगा, हालांकि, क्योंकि मैं इस जानकारी को डिफ़ॉल्ट मामले में निकालने की कोशिश कर रहा हूं। यही है, अगर प्रोग्रामर मॉड्यूल निर्दिष्ट करने के लिए भूल गया है, तो लॉग लाइन के लिए दूसरा पैरामीटर, मुझे काम करने के लिए समाधान की आवश्यकता है।
क्या ऐसा करने का कोई तरीका है? यदि नहीं, तो मुझे बस caller
सरणी के साथ करना होगा; हमारे अधिकांश मॉड्यूल अलग निर्देशिका में हैं, इसलिए यह 80% समाधान होगा। फ़ाइल foo.rb में
module Log
class Logger
def info(msg, mod = '')
puts "Module: #{mod} Msg: #{msg}"
end
end # class Logger
end # module Log
$log = Log::Logger.new
: फ़ाइल log.rb में
:
अधिक पूर्ण उदाहरण के लिए, कृपया नाबालिग वाक्यविन्यास त्रुटियों बहाना
module Foo
class Bar
def do_something
# Do not pass in self.class.name.
# We want the output to look like:
# Module: Foo Msg: I did something!
$log.info "I did something!"
end
end # class Bar
end #module Foo
मुझे नहीं लगता कि आप इसे कैसे कर सकते हैं, जब तक कि लॉगर ऑब्जेक्ट में 'self' या' बाध्यकारी 'पास न हो। आपको फ़ाइल को 'कॉलर' से जानकारी के साथ पार्स करना होगा, जो मुझे यकीन है कि आप नहीं करना चाहते हैं। –