Comment obtenir NLog pour analyser le contenu du contenu des fichiers de rendu?

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

  •  24-09-2019
  •  | 
  •  

Question

J'ai une cible 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 ressemble à ceci:

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

Comment puis-je obtenir NLog pour analyser le contenu de error.html, de sorte que le $ {message} param se rend aux règles NLog?

Était-ce utile?

La solution

Je pris un coup de poignard à elle et est venu avec cette solution:

  • Mon nouveau moteur de rendu hérite de NLog.LayoutRenderers.FileContentsLayoutRenderer
  • Ensuite, dans la méthode append (), j'ai ce code (ce qui est très similaire au code dans la méthode append () de FileContentsLayoutRenderer:

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

Le plus gros problème est que jusqu'à la appdomain de l'application réutilise, ce fichier reste en mémoire et ne jamais relire à partir du disque. Ainsi, des changements ne modifie pas la sortie initialement.

J'ai ajouté un code de débogage pour gérer cela, mais il faut ajouter un code plus robuste pour reconnaître le changement dans un environnement de production.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top