2010-04-05 15 views
8

मैं किसी एप्लिकेशन (रूबी) के लॉगिंग स्तर को बदलना चाहता हूं।कॉन्फ़िगर करने योग्य रूबी लॉगर सेटअप: Logger.new()। Level = variable

खैर, आईआरबी कि से खुश नहीं था और फेंक दिया "NameError: गलत निरंतर नाम लॉगर :: चेतावनी" मेरे चेहरे में। ओह! मेरा अपमान हुआ

मैं इसे किसी मामले में/इसे हल करने के लिए कर सकता हूं, या log.level = 1 कर सकता हूं, लेकिन एक और अधिक शानदार तरीका होना चाहिए!

क्या किसी के पास कोई विचार है?

-daniel

उत्तर

15

आप क्यों नहीं बस अपने config हैश में शाब्दिक निरंतर उपयोग नहीं करते हैं?

config = { :level => Logger::WARN } 

तो फिर तुम const_get या ऐसा कुछ के साथ चारों ओर मूर्ख नहीं है; आप बस log.level = config[:level] कर सकते हैं।

यह बिल्कुल कोई स्ट्रिंग होना चाहिए, तो आप नामस्थान उपसर्ग ड्रॉप और Logger मॉड्यूल पर const_get कॉल कर सकते हैं:

irb(main):012:0> Logger.const_get 'WARN' 
=> 2 

यदि यह वास्तव में बहुत योग्य स्ट्रिंग हो गया है, तो आप हो सकता है this blog's qualified_const_get method (जो अंतर्निहित नहीं है!) का उपयोग करने का प्रयास करें।

+3

निरंतर कॉन्फ़िगरेशन में संग्रहीत नहीं किया जा सकता है, क्योंकि कॉन्फ़िगरेशन को यम फ़ाइल से लोड किया गया है, लेकिन Logger.const_get 'WARN' मेरे लिए बहुत अच्छा काम करता है! – Daniel

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