Question

Y at-il une liste d'informations contextuelles (ie $ {} de longdate $ {} niveau, $ {message}) en ligne? Je veux définir le fichier journal dans un dossier AppData \ Local de l'utilisateur. Est-ce peut-être $ {} appdatalocal? Et comment pourrais-je accéder au fichier à envoyer en pièce jointe peut-être comme
message.Attachments.Add("${appdatalocal}\somefolder\Application.log")?

Était-ce utile?

La solution

Voir ce lien de la liste des LayoutRenderers pris en charge par NLog. Notez que certaines de ces schémas équarrisseurs ont été ajoutés dans NLog 2.0 (qui vient de sortir en version bêta en Septembre). Il y a quelques LayoutRenderers qui vous permettent de spécifier des dossiers « spéciaux » (comme Mes documents, Ma musique, etc.). Il y a aussi un LayoutRenderer qui peut récupérer tha valeur d'une variable d'environnement. Vous pouvez utiliser LayoutRenderers pour définir le nom du fichier:

${basedir}/${shortdate}.log

ou

${environment:variable=TEMP}/${processname}.log

En ce qui concerne l'accès au nom de fichier résultant programme, je ne sais pas comment faire, même si j'ai une idée ...

Vous pouvez configurer un MethodCallTarget (voir la documentation sur le lien ci-dessus - ou, mieux encore, consultez le fichier d'aide NLog) avec la même disposition que la mise en page que vous utilisez pour définir le nom du fichier. Définir une seule règle de l'enregistreur dans le fichier NLog.config (ou app.config si vous configurez en ligne) qui se connecte à cette cible. Écrivez la méthode statique, Journalisation, qui sera appelé par le MethodCallTarget. Écrire une autre méthode statique, GetFilename, sur la même classe qui renvoie une chaîne. GetFilename enregistre simplement un message en utilisant l'enregistreur qui est configuré pour écrire dans le MethodCallTarget. appelle NLog Journalisation. A l'intérieur de Journalisation, vous recevrez le message formatés. Depuis que vous avez configuré la mise en page soit la même que la mise en page de nom de fichier (à savoir que les paramètres nécessaires pour calculer le nom du fichier), la valeur du message qui est connecté doit être le chemin du fichier. Depuis Journalisation doit être une méthode statique (exigence NLog), vous n'avez pas beaucoup de choix où le « nom de fichier » est stocké. Je viens de mettre dans une variable de chaîne statique.

Quelque chose comme ça (à partir d'échantillons dans le fichier d'aide NLog sous MethodCallTarget):

public class Example
{
  private static filename;

  //
  // This is the method that NLog will call when you log with the logger that is configured
  // to write to the MethodCallTarget
  //
  public static void LogMethod(string level, string message)
  {
    filename = message;
  }

  public static string GetLogFile()
  {
    Logger logger = LogManager.GetLogger("filenamelogger");
    filenamelogger.Info("logging a message just to get the result");
    return filename;
  }
}

Configurer quelque chose comme ceci:

  <variable fn="${basedir}/${processname}.log" />
  <targets> 
    <target name="m" xsi:type="MethodCall" className="Example, MethodCall" 
            methodName="LogMethod"> 
      <parameter layout=${fn} /> 
    </target> 
    <target name="f" xsi:type="File"
            layout="${longdate} ${loggername} ${level} ${message}" 
            fileName="${fn}">
    </target>
  </targets> 
  <rules> 
    <logger name="filenamelogger" minlevel="Debug" writeTo="m" final="true" /> 
    <logger name="*" minlevel="Debug" writeTo="f" />
  </rules> 

Il est évident que c'est pas sûre, mais il montre un moyen d'obtenir le résultat d'une mise en page.

scroll top