2010-08-14 16 views
81

मैं स्टैक ट्रेस लॉग करने का सही तरीका जानने का प्रयास कर रहा हूं। मैं this लिंक पर आया जो बताता है कि logger.error $ !, $! बैकट्रैक जाने का तरीका है, लेकिन यह मेरे लिए काम नहीं करता है log_error करता है। दस्तावेज़ीकरण के अनुसार मैं नहीं देखता कि त्रुटि विधि के लिए दूसरा तर्क कैसे गुजर रहा है वैसे भी काम करेगा क्योंकि रूबी लॉगर जो रेल का उपयोग करता है केवल एक ही तर्क स्वीकार करता है।रेल: अपवाद के पूरे स्टैक ट्रेस को लॉगिंग

अजीब (या शायद नहीं) दूसरा तर्क किसी दुभाषिया शिकायतों के बिना स्वीकार किया जाता है। हालांकि जो भी मैं इसे पास करता हूं उसे नजरअंदाज कर दिया जाता है।

क्या कोई मुझे बता सकता है कि मुझे क्या याद आ रही है? त्रुटि के दूसरे तर्क के बारे में कोई अंतर्दृष्टि क्या है और यह क्या खा रहा है?

उत्तर

164

यदि आप ActiveSupport में BufferedLogger क्लास के स्रोत को देखते हैं, तो आप देखेंगे कि दूसरा तर्क 'progname' है। इसका उपयोग तब किया जाता है जब पहला तर्क शून्य होता है और आपने या तो इसे कोई ब्लॉक नहीं दिया है या ब्लॉक एक गैर-सत्य मान लौटाता है।

संक्षेप में, आप अतिरिक्त सामग्री आउटपुट के लिए दूसरे पैरामीटर का उपयोग नहीं कर सकते हैं। कैसे आप अपने प्रवेश सेटअप के आधार पर यह बेहतर हो सकता है पश्व-अनुरेखन की प्रत्येक पंक्ति के माध्यम से पुनरावृति और प्रिंट इसे अलग रूप में कुछ वालों को

begin 
    raise 
rescue => e 
    logger.error e.message 
    logger.error e.backtrace.join("\n") 
end 

:

आप क्या करना चाहते क्या अधिक समान कुछ करने के लिए है न्यूलाइन आउटपुट न करें, इस मामले में आप कुछ ऐसा करेंगे:

+0

धन्यवाद, जो अधिक समझ में आता है। मैं पिछले stackoverflow जवाब से उलझन में था। –

+5

मैं क्रॉस-प्लेटफ़ॉर्म संगतता को बनाए रखने के लिए "\ r \ n" का उपयोग करके शामिल हो जाऊंगा। –

+4

क्रॉस-प्लेटफ़ॉर्म संगत होने के लिए आप '$ /' का उपयोग नहीं करेंगे? रूबी को इसकी देखभाल करने दें, क्योंकि \ \ \ \' केवल कुछ प्लेटफ़ॉर्म के लिए विशिष्ट है। – vgoff

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