10
votes

Nom de fichier fixe Nlog par session d'application

J'utilise Nlog pour vous connecter à mon application C #. Ce qui suit est la section de mon nlog.config: xxx

pour le nom de fichier J'utilise $ { Date: Format = yyyymmdd_hhmmss} _trg.log Pour nommer le journal en fonction de la création de sa création. Cependant, bien que mon application fonctionne, l'enregistreur crée un nouveau fichier journal chaque seconde. Comment puis-je forcer Nlog pour corriger le nom du fichier et créer un seul journal par session?


1 commentaires

4 Réponses :


10
votes

Je ne sais pas avec certitude, mais je suppose que Nlog vérifie l'existence du fichier journal, en fonction de la propriété FileName (qui est dynamique puisque vous utilisez la mise en page Date de mise en page). Donc, étant donné que le nom de fichier change (c'est-à-dire chaque fois que la valeur du nom de fichier est extraite, il est différent (ou peut être différent)), Nlog crée un nouveau fichier.

Essayez d'utiliser le rendu de mise en page ShortDate comme ceci: P> XXX PRE>

Je pense que vous verrez que votre nom de fichier ne changera pas (jusqu'à minuit). p>

La clé est que Nlog vérifiera toujours si le fichier existe (selon la valeur du nom de fichier à l'époque où un message de journal est écrit em>) et créera le fichier s'il n'existe pas encore. p>

Alternativement, si vous souhaitez nommer votre journal Fichier avec un nom de fichier plus précis (c'est-à-dire qu'il a été créé à une date à une date à un moment donné), vous pouviez stocker cette heure dans le globaldiagnosticContext et utiliser le rendu de mise en page GDC pour prénomer le fichier. Quelque chose comme ceci: p> xxx pré>

dans votre fichier nlog.config, faites quelque chose comme ceci: p> xxx pré>

Enfin, vous pourriez Écrivez un SyouTrenderer personnalisé pour renseigner la date / l'heure. Il obtiendrait le temps une fois et puis retournerait la même valeur à chaque fois. P>

Il ressemblerait à ceci: p> xxx pré>

dans votre fichier nlog.config Vous avez besoin de quelque chose comme ceci pour dire où vos extensions sont les suivantes: p> xxx pré>

et ensuite votre configuration cible ressemblerait à ceci: p>

<targets>     
  <target name="logfile" xsi:type="File"    
          fileName="..\logs\${StartTime:format=yyyyMMdd_HHmmss}_trg.log"     
          layout="${counter} | ${date:format=yyyy-MM-dd HH\:mm\:ss.ffff} | ${machinename} | ${level:uppercase=true} | ${logger:shortName=true} | ${stacktrace} | ${message:exceptionSeparator=EXCEPTION:withException=true}"      
          keepFileOpen="true"/> 
</targets>


0 commentaires

8
votes

apparemment il y a un $ {Cached} rendu de mise en page qui rendra la mise en page une fois et la réutilisera. https://github.com/nlog/nlog/wiki/cached-layout- Rendu

Cependant, grâce à @wageoghe pour votre contribution. Votre solution à l'aide du GlobalDiagnosticContext m'a fait penser à passer d'autres valeurs à Nlog.config.


4 commentaires

FYI: Votre lien Wiki Nlog a cassé.


@kenny Il ressemble au site de Nlog a été mis à jour beaucoup. Essayez ce lien: Github.com/nlog/nlog/wiki/cached-layout- Renderer


Quelqu'un a un exemple en utilisant $ {cached} ?


@drzaus l'a trouvé - Stackoverflow.com/Questtions/17269456/...



1
votes

Je pense que cette façon en modifiant le fichier journal spécifié dans le fichier de configuration Nlog dans la fonction principale ou au début de votre programme. Ceci est la cible "logfile" comme cible de fichier dans le fichier de configuration de votre exemple.

FileTarget target = LogManager.Configuration.FindTargetByName("logfile") as FileTarget;
String logfile = "..\logs\" +  DateTime.Now.ToString("yyyyMMdd_HHmmss") + "_trg.log";
target.FileName = logfile; 


0 commentaires

4
votes

Exemple sur l'utilisation de $ {Cached} wrapper ( https://github.com / Nlog / Nlog / Wiki / Cached-Layout-Renderer ) Pour créer un fichier journal de session par application:

<target 
    name="logfile" 
    xsi:type="File" 
    fileName="log-${date:cached=True:format=yyyy-MM-dd HH-mm-ss-fff}.txt"
/>


0 commentaires