पुन: कॉन्फ़िगर करें मैं अपने ASP.NET ऐप्स में Log4Net लॉगिंग स्तर को गतिशील रूप से पुन: कॉन्फ़िगर करने के सर्वोत्तम तरीके पर युक्तियों की तलाश में हूं। मैं आमतौर पर एक साधारण विन्यास का उपयोग करता हूं जहां रूट लॉगर डिफ़ॉल्ट लॉगिंग स्तर को परिभाषित करता है, उदा।गतिशील रूप से लॉग 4Net
<log4net>
<root>
<level value="INFO" />
<appender-ref ref="..." />
<appender-ref ref="..." />
... etc ...
</root>
... etc
और कई परिशिष्ट हो सकते हैं, प्रत्येक फ़िल्टर के साथ लॉगिंग स्तर को परिभाषित करने के लिए।
पहली बात मैं ऐसा करने में सक्षम होना चाहते हैं व्यवस्थापकों एक व्यवस्थापक पृष्ठ है कि उन्हें (क) जड़ लकड़हारा और के लिए वर्तमान स्तर को देखने के लिए सक्षम बनाता है (ख) गतिशील रूप से कनेक्ट करने की अनुमति के लिए होगा बदल दें। मैं "कॉन्फ़िगर एंडवॉच" का उपयोग नहीं करना चाहता हूं और डिस्क पर कॉन्फ़िगरेशन फ़ाइल को लिखना चाहता हूं क्योंकि मैं नहीं चाहता कि एप्लिकेशन को पुनर्नवीनीकरण के दौरान इन परिवर्तनों को जारी रखा जाए।
अगला मैं आगे जाना चाहता हूं, और एक व्यवस्थापक पृष्ठ पर सभी मौजूदा लॉगर्स के साथ ट्री व्यू प्रदर्शित करने में सक्षम होना चाहिए जो उनके अनुप्रयोग में मौजूद हैं, और उनके वर्तमान लॉगिंग स्तर। और व्यवस्थापक को पदानुक्रम के किसी भी स्तर पर चुनिंदा स्तर को चुनने में सक्षम होने की अनुमति दें।
विचार एक सामान्य व्यवस्थापक पृष्ठ है कि मैं अपने सभी क्षुधा प्रशासकों चुनिंदा समस्याएं दूर करने के लिए गतिशील रूप से डीबग स्तरीय लॉगिंग सक्षम करने की अनुमति देता है कि में डाल सकते हैं बनाने के लिए है।
मुझे लॉग 4नेट एपीआई थोड़ा उलझन में मिलती है, क्या कोई नमूने को इंगित कर सकता है या इसे प्राप्त करने का सबसे अच्छा तरीका दिखा सकता है।
अद्यतन:
दोनों जवाब समान रूप से अच्छे हैं, इसलिए मैं पहली बार स्वीकार कर लिया है - धन्यवाद। काट-छांट कर लिए, मैं सभी मौजूदा वालों के रूप में निम्नानुसार प्राप्त कर सकते हैं:
foreach (log4net.ILog log in log4net.LogManager.GetCurrentLoggers())
{
log4net.Repository.Hierarchy.Logger logger =
(log4net.Repository.Hierarchy.Logger)log.Logger;
Debug.WriteLine(
String.Format("{0} Parent {1} Level {2} EffectiveLevel {3}<br>",
logger.Name,
logger.Parent.Name,
logger.Level == null ? "<null>" : logger.Level.Name,
logger.EffectiveLevel
)
);
}
EffectiveLevel प्रभावी स्तर है - अगर बाद रिक्त नहीं है स्तर के रूप में ही है, अन्यथा माता पिता से विरासत में मिला।
ऊपर लौटाए गए लॉगजर में से कम से कम एक में मूल लॉगर के रूप में रूट लॉगर होगा, जो मुझे रूट लॉगर का संदर्भ प्राप्त करने में सक्षम बनाता है।
ऊपर के साथ लॉगर पदानुक्रम का पुनर्निर्माण करना संभव होना चाहिए। फिर
अद्यतन 2
धन्यवाद। मैंने एक एएसपी.NET सर्वर नियंत्रण लागू किया है जो एक वृक्ष दृश्य में लॉगर व्यूअर को चेकबॉक्स के साथ प्रदर्शित करता है, और उपयोगकर्ता को पदानुक्रम में किसी भी नोड पर लॉगिंग स्तर को गतिशील रूप से बदलने की अनुमति देता है। बहुत अच्छा काम करता है और मैं इसे अपने सभी एएसपी.नेट वेब और वेब सेवा ऐप्स में एडमिन पेज पर डाल दूंगा!
मैं ऊपर कोड परीक्षण किया और पाया कि मैं खजाने के सभी के माध्यम से लूप करने के लिए आवश्यक है और डबल प्रकार की जाँच करें। foreach (LogManager.GetAllRepositories में वर रेपो()) foreach (। Repo.GetCurrentLoggers में वर लकड़हारा() OfType()) logger.Level = स्तर; –
एफवाईआई: डायनामिक लॉग 4नेट कॉन्फ़िगरेशन एपीआई का उपयोग करते समय मैं एक बार समवर्ती मुद्दों में भाग गया - यह थ्रेड सुरक्षित प्रतीत नहीं होता है। – galaktor
लॉग 4नेट का कौन सा संस्करण था? मुझे आईएलओजी के किसी भी कार्यान्वयन को नहीं देख रहा है जो रेपोजिटरी में जा सकता है। हाइरार्की। लॉगर –