كيفية الحصول على NLOG لتحليل محتويات العارض محامي الملف؟

StackOverflow https://stackoverflow.com/questions/2182703

  •  24-09-2019
  •  | 
  •  

سؤال

لدي هدف 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 للتطبيق ، سيبقى هذا الملف في الذاكرة ولا يتم إعادة قراءته أبدًا من القرص. لذا فإن إجراء التغييرات لا يؤثر على الإخراج في البداية.

لقد أضفت بعض رمز التصحيح للتعامل مع هذا ، ولكن بحاجة إلى إضافة المزيد من التعليمات البرمجية القوية للتعرف على التغيير في بيئة الإنتاج.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top