J'utilise Nlog pour vous connecter à mon application C #. Ce qui suit est la section pour le nom de fichier
code> J'utilise
$ { Date: Format = yyyymmdd_hhmmss} _trg.log code> 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? P> p>
4 Réponses :
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> dans votre fichier nlog.config, faites quelque chose comme ceci: p> 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> dans votre fichier nlog.config Vous avez besoin de quelque chose comme ceci pour dire où vos extensions sont les suivantes: p> 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>
apparemment il y a un Cependant, grâce à @wageoghe pour votre contribution. Votre solution à l'aide du $ {Cached} code> 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 p>
GlobalDiagnosticContext CODE> m'a fait penser à passer d'autres valeurs à Nlog.config. P>
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} code>?
@drzaus l'a trouvé - Stackoverflow.com/Questtions/17269456/...
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;
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" />
Essayez ce lien: SharedCache.com/cms/configuration_nlog.aspx