मैं लॉगिंग के लिए अपने आवेदन में Log4J का उपयोग कर रहा हूं । पहले मैं डिबग कॉल का उपयोग कर रहा था जैसे:
विकल्प 1:
logger.debug("some debug text");
लेकिन कुछ लिंक बताते हैं कि isDebugEnabled()
पहले जाँच करना बेहतर है , जैसे:
विकल्प 2:
boolean debugEnabled = logger.isDebugEnabled();
if (debugEnabled) {
logger.debug("some debug text");
}
तो मेरा सवाल है " क्या विकल्प 2 किसी भी तरह से प्रदर्शन में सुधार करता है? "।
क्योंकि किसी भी स्थिति में Log4J फ्रेमवर्क डिबग इनेबल्ड के लिए एक ही जाँच है। विकल्प 2 के लिए यह फायदेमंद हो सकता है यदि हम एकल विधि या वर्ग में कई डिबग स्टेटमेंट का उपयोग कर रहे हैं, जहां रूपरेखा को isDebugEnabled()
कई बार (प्रत्येक कॉल पर) विधि की आवश्यकता नहीं है ; इस स्थिति में यह isDebugEnabled()
केवल एक बार विधि कहता है , और यदि Log4J को डिबग स्तर पर कॉन्फ़िगर किया गया है, तो वास्तव में यह isDebugEnabled()
दो बार विधि कहता है :
- डिबग इनेबल्ड चर के लिए मान असाइन करने के मामले में, और
- वास्तव में logger.debug () विधि द्वारा कहा जाता है।
मुझे नहीं लगता है कि यदि हम विकल्प 1 के अनुसार logger.debug()
विधि या वर्ग और कॉलिंग debug()
विधि में कई कथन लिखते हैं तो यह विकल्प 2 की तुलना में Log4J फ्रेमवर्क के लिए ओवरहेड है। चूंकि isDebugEnabled()
बहुत छोटी विधि है (कोड के संदर्भ में), यह हो सकता है inlining के लिए अच्छा उम्मीदवार हो।