Domanda

Ho un obiettivo 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 assomiglia a questo:

<div>
    <b>Message</b>=${message}
</div>

Come posso ottenere NLog per analizzare il contenuto di error.html, in modo che il messaggio {} param $ viene reso con regole NLog?

È stato utile?

Soluzione

Ho preso una pugnalata a esso e si avvicinò con questa soluzione:

  • I miei nuovi eredita renderer da NLog.LayoutRenderers.FileContentsLayoutRenderer
  • Poi, nel metodo Append (), ho questo codice (che è molto simile al codice a Append di FileContentsLayoutRenderer () Metodo:

    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);
    

Il problema più grande di questo è che fino a quando ricicla AppDomain della app, il file rimarrà nella memoria e mai ottenere ri-letta dal disco. Così facendo modifiche non influenza l'uscita inizialmente.

Ho aggiunto un po 'di codice di debug per gestire questo, ma hanno bisogno di aggiungere il codice più robusto di riconoscere il cambiamento in un ambiente di produzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top