كيفية الحصول على NLOG لتحليل محتويات العارض محامي الملف؟
سؤال
لدي هدف NLOG:
<target name="AspNetAsyncWrapperForMail" xsi:type="ASPNetBufferingWrapper">
<target name="mail" xsi:type="Mail"
subject="Error: ${callsite:includeSourcePath=False}"
smtpServer="MySMTP"
from="me@test.com"
to="me@test.com"
smtpAuthentication="None"
body="${date}${file-contents:${basedir}/error.html}"
html="true"/>
</target>
error.html يبدو هكذا:
<div>
<b>Message</b>=${message}
</div>
كيف يمكنني الحصول على nlog لتحليل محتويات error.html ، بحيث يتم تقديم param $ {message} مع قواعد nlog؟
المحلول
أخذت طعنة في ذلك وتوصلت إلى هذا الحل:
- يرث العارض الجديد من nlog.layoutrenderers.fileContentslayoutrenderer
بعد ذلك ، في طريقة إلحاق () ، لدي هذا الرمز (الذي يشبه إلى حد كبير الكود في طريقة إلحاق () Append ():
lock (this) { var fileName = FileName.GetFormattedMessage(logEvent); if (fileName != m_LastFileName) { ReadFileContents(fileName); } var layoutString = new Layout(_fileContents); m_RenderedContent = layoutString.GetFormattedMessage(logEvent); m_LastFileName = fileName; } builder.Append(m_RenderedContent);
المشكلة الأكبر في ذلك هي أنه حتى يتم إعادة تدوير AppDomain للتطبيق ، سيبقى هذا الملف في الذاكرة ولا يتم إعادة قراءته أبدًا من القرص. لذا فإن إجراء التغييرات لا يؤثر على الإخراج في البداية.
لقد أضفت بعض رمز التصحيح للتعامل مع هذا ، ولكن بحاجة إلى إضافة المزيد من التعليمات البرمجية القوية للتعرف على التغيير في بيئة الإنتاج.
لا تنتمي إلى StackOverflow