.net - How to get NLog to parse contents of file-contents renderer? -
मेरे पास एक NLog लक्ष्य है:
& lt; लक्ष्य नाम = "aspNetAsyncWrapperForMail" xsi: type = "ASPNetBufferingWrapper" & gt; & Lt; लक्ष्य नाम = "मेल" xsi: प्रकार = "मेल" विषय = "त्रुटि: $ {callites: includeSourcePath = False}" smtpServer = "MySMTP" से = "me@test.com" से = "मुझे @ परीक्षण" Com "smtpAuthentication =" None "body =" $ {date} $ {फाइल-सामग्री: $ {baseir} /error.html} "html =" true "/ & gt; & Lt; / लक्ष्य & gt;
Error.html इस तरह दिखता है:
& lt; div & gt; & Lt; b & gt; संदेश & lt; / b & gt; = $ {message} & lt; / div & gt;
मैं error.html की सामग्री को पार्स करने के लिए NLog कैसे प्राप्त कर सकता हूं, ताकि $ {message} param को NLog नियमों के साथ प्रदान किया जाए?
मैंने इस पर एक चाकू लिया और इस समाधान के साथ आया:
- मेरा नया रेंडरर NLog.LayoutRenderers से मिला है। FileContentsLayoutRenderer
-
उसके बाद, ऐपेंड () विधि में, मुझे यह कोड है (जो फ़ाइल कंटेंट्स लयआउट रेंडरर के ऐप () विधि में बहुत ही समान है:
lock (यह) {var fileName = FileName.GetFormattedMessage (logEvent); अगर (fileName! = M_LastFileName) {ReadFileContents (fileName);} var लेआउटस्ट्रिंग = नया लेआउट (_fileContents); m_RenderedContent = layoutString.GetFormattedMessage (logEvent); m_LastFileName = fileName; } बिल्डर। ऐपेंड (एम_रेंडर कंटेंट);
इस के साथ सबसे बड़ी समस्या यह है कि जब तक ऐप के ऐपडोमेन रीसायकल न हो जाए, उस फाइल को ऐन स्मृति में और कभी डिस्क से फिर से पढ़ा नहीं। तो परिवर्तन करना शुरू में उत्पादन को प्रभावित नहीं करता है।
मैंने इसे संभालने के लिए कुछ डिबग कोड जोड़ दिया है, लेकिन उत्पादन वातावरण में परिवर्तन को पहचानने के लिए अधिक मजबूत कोड जोड़ने की आवश्यकता है।
< / div>
Comments
Post a Comment