मैं मूल रूप से एक ग्राहक लॉगर/ट्रेसर लिखना चाहता हूं जो कि लॉगर/ट्रैसर को कॉल करने वाले विधि के वर्ग और विधि नाम को भी लॉग करता है। यह तेज़ होना चाहिए ताकि यह अनुप्रयोग के प्रदर्शन को प्रभावित न करे, दृढ़ता से टाइप और साफ हो। क्या किसी के पास अच्छे विचार हैं? बहुत धीमी गति सेकक्षा और विधि के नाम को लॉग करने का सबसे प्रभावी तरीका क्या है?
StackTrace/StackFrame
MethodInfo.GetCurrentMethod() (अब भी:
यहाँ कुछ मैं था कर रहे हैं, लेकिन मैं प्रतिबिंब की वजह से प्रदर्शन के बारे में चिंता (बहुत ज्यादा भूमि के ऊपर?)? के रूप में प्रतिनिधि (सी # और बहुत साफ नहीं)
पास विधि है कि परोक्ष कर सकते हैं और मैं MethodInfo के लिए उपयोग किया है, लेकिन बहुत साफ नहीं)
मैं किसी की टिप्पणियों की सराहना करता हूं।
अद्यतन:
मैं इसे पसंद किया StackFrame की cleanless तो मैं StackFrame के प्रदर्शन के संबंध में एक अधिक विशिष्ट प्रश्न here पूछा और मैं प्रदर्शन परीक्षणों सहित कुछ वास्तव में अच्छी प्रतिक्रिया मिल गया। यह पता चला है कि MethodInfo.GetCurrentMethod()
सबसे तेज़ है (मेरे कंप्यूटर पर लगभग 1 माइक्रोसॉन्ड लेता है) और new StackFrame(1)
मांग पर अनुरोध किया जा सकता है (मेरे कंप्यूटर पर लगभग 15-20 माइक्रोसॉन्ड लेता है)। मैंने विधि को विकल्प के रूप में फेंक दिया क्योंकि विधि में कई पैरामीटर हैं जब यह बहुत गन्दा है।
निष्कर्ष:
मैं सभी विकल्पों को देखा है और सबसे अच्छा PostSharp के लिए एक कस्टम प्लग में जो संकलन के दौरान MSIL में स्ट्रिंग के रूप में विधि नाम injects जब की तरह एक कस्टम विशेषता को लागू करने के बारे में करने के लिए है [Trace]
इसे। यह मेरी राय में सबसे तेज़ और सबसे रखरखाव विकल्प है। यह पैरामीटर नामों और तर्कों को बिना किसी प्रकार के प्रतिबिंब और पकड़ने और अपवादों को स्वचालित रूप से लॉगिंग करने जैसी कई और चीजों को सक्षम बनाता है। अधिक जानकारी के लिए यह my related question।
मैं पूछ सकते हैं, आप log4net उपयोग करने के लिए क्यों चाहते है? – nWorx
मुझे अन्य घटकों पर भी भरोसा नहीं है। और log4net के मामले में, यह बहुत जटिल है। –
हरमन, इसे आम तौर पर हमारे उद्योग में "यहां सिंड्रोम का आविष्कार नहीं किया गया" के रूप में जाना जाता है और इससे बचा जाना सर्वोत्तम होता है। इस दुःख के बारे में अधिक जानकारी के साथ यहां एक विकिपीडिया लिंक है: http://en.wikipedia.org/wiki/Not_Invented_Here –