Nlog festen Dateinamen pro app-Sitzung
Ich bin mit Nlog log von meinem c# - app. Im folgenden ist die <targets>
Abschnitt aus meinem Nlog.config:
<targets>
<target name="logfile" xsi:type="File" fileName="..\logs\${date: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>
Für die filename
ich bin mit ${date:format=yyyyMMdd_HHmmss}_trg.log
um den Namen der log-basiert ist, wenn es erstellt wurde. Aber, während die app ausgeführt wird, wird der logger erstellt eine neue log-Datei jede Sekunde. Wie kann ich Kraft Nlog zu beheben, den Namen der Datei, und erstellen Sie nur ein Login pro Sitzung?
- Versuchen Sie diesen link: sharedcache.com/cms/configuration_nlog.aspx
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß es nicht sicher, aber meine Vermutung ist, dass NLog überprüft das Vorhandensein der log-Datei basierend auf dem Dateinamen Eigenschaft (die ist dynamisch, da Sie mit der Datum-layout-renderer). So, da das mit dem Namen ändern ist (d.h. jedes mal, wenn der Dateiname mit dem Wert abgerufen, das es anders ist (oder anders sein kann)), NLog erzeugt eine neue Datei.
Versuchen, mit den shortdate layout-renderer wie diese:
Ich denke, Sie werden sehen, dass Ihr mit dem Namen nicht ändern (bis Mitternacht).
Der Schlüssel ist, dass NLog wird immer überprüfen, um zu sehen, ob die Datei vorhanden ist (entsprechend dem Wert, der mit dem Namen an der Zeit, dass eine log-Meldung geschrieben wird) und erstellen die Datei, wenn es Sie noch nicht gibt.
Alternativ, wenn Sie wollen, nennen Sie Ihre log-Datei mit präziser mit dem Namen (D. H., dass es erstellt wurde, auf ein Datum irgendwann in der Zeit), dann könnte man speichern, die Zeit in der GlobalDiagnosticContext und Nutzung der gdc layout-renderer zu helfen, benennen Sie die Datei. So etwas wie dieses:
In Ihrem NLog.config-Datei, tun Sie etwas wie dieses:
Schließlich könnten Sie schreiben eine benutzerdefinierte LayoutRenderer, der zum Auffüllen des Datum/Zeit. Es würde die Zeit mal und dann wieder den gleichen Wert jedes mal.
Es würde in etwa so Aussehen:
In Ihrem NLog.config-Datei benötigen Sie so etwas wie dies zu sagen, wo Ihre extensions sind:
Werden und dann die Ziel-Konfiguration würde wie folgt Aussehen:
Anscheinend gibt es ein
${cached}
layout-renderer, rendert das layout einmal und verwenden es. https://github.com/nlog/nlog/wiki/Cached-Layout-RendererJedoch, Dank @wageoghe für Ihre Eingabe. Ihre Lösung mit der
GlobalDiagnosticContext
hat mir denken darüber nach, andere Werte zu NLog.config.${cached}
?Beispiel mit ${Cache} wrapper (https://github.com/nlog/NLog/wiki/Cached-Layout-Renderer) zum erstellen von pro-application-session-log-Datei:
Ich denke, dass dieser Weg durch das ändern der log-Datei angegeben, in der NLog config-Datei in der Main-Funktion oder am Anfang Ihres Programms. Dieses Ziel ist "logfile" als Ziel-Datei im config-Datei von deinem Beispiel.