Anscheinend wurde dies zu einem Konfigurationselement heraufgestuft: <datePattern value = "dd.MM.yyyy'.log '" /> Prost!
Longda
3
@mstaessen <preserveLogFileNameExtension value="true" />ist die richtige Syntax und dies ist eine großartige Antwort. Wie ist der Verlust entstanden, darf ich fragen?
Larry B
1
Wenn ich mich richtig erinnere, ging es so. Beim Start würde log4net den ersten Dateinamen in der fortlaufenden Sequenz generieren. Es würde erkennen, dass diese Datei bereits vorhanden ist, und dann entscheiden, in die zweite Datei zu rollen, aber wenn diese ebenfalls bereits existiert, entscheidet es sich nicht, zu rollen, sondern löscht sie und überschreibt alles in dieser zweiten Protokolldatei. Es geht völlig unbemerkt vorbei, bis Sie Protokolle des gelöschten Zeitrahmens benötigen ...
Ich denke, Sie sollten den Hauptpunkt des Parameters hervorheben, um das Problem zu lösen, wie es @Mun getan hat. Ich habe jedoch auch für Ihre Antwort gestimmt.
RDeveloper
1
Es war das datePattern-Element in Verbindung mit dem staticLogFileName-Element (und beachten Sie das value-Attribut für das
Dateielement
Die vollständige Antwort!
Nagesh
32
Für einen RollingLogFileAppender benötigen Sie außerdem folgende Elemente und Werte:
Dies funktioniert, hängt jedoch das Datum nach der Dateierweiterung an. Zum Beispiel bekomme ich Protokolldateien wie Error.log20111104 - Kennt jemand eine Möglichkeit, den Dateinamen etwas besser zu formatieren?
Wofür wird staticLogFileName verwendet? Ich möchte erst, dass die Protokolldatei nach Tagesende in einen neuen Namen umgewandelt wird. Ich möchte einen Protokollmonitor verwenden, der jedes Mal einen bestimmten betrachtet.
So
21
Mit Log4Net 1.2.13 verwenden wir die folgenden Konfigurationseinstellungen, um die Datums- und Uhrzeitangabe im Dateinamen zuzulassen.
Wenn die Dateigröße ein Problem darstellt, können im Folgenden 500 Dateien mit einer Größe von 5 MB verwendet werden, bis ein neuer Tag erscheint. CountDirection ermöglicht die aufsteigende oder absteigende Nummerierung von Dateien, die nicht mehr aktuell sind.
Das Problem mit anderen Parameterkombinationen war, dass die neueste Datei nicht über das Zeitmuster verfügte oder dass das Zeitmuster so angehängt wurde, dass .log20171215eine neue Dateizeit (und ein neuer Dateityp) erstellt wurde! jeden Tag ) - oder beide Probleme auftraten.
Mit dieser Einstellung erhalten Sie jetzt Dateien wie diese:
LOG4NET_Sample_Activity-20171215.log
Welches ist, was ich wollte.
Zusammenfassen:
Fügen Sie das Datumsmuster nicht in das <file value=...Attribut ein, sondern definieren Sie es einfach im datePattern.
Stellen Sie sicher, dass Sie das preserveLogFileNameExtensionWertattribut auf gesetzt haben true.
Stellen Sie sicher, dass Sie den staticLogFileNameWert auf eingestellt haben false.
Stellen Sie den AttributwertrollingStyle auf .Date
warum gibt es %date{yyyyMM}und value="ddMMyyyy" ? Welches ist das Datum des Inkrafttretens?
Allan Ruin
Ich denke, datePattern ist für den Dateinamen, aber% date {yyyyMM} ist für das übergeordnete Verzeichnis (ich wollte es so)
Fourat
Das Attribut datePattern legt die fortlaufende Periode für Date rollingStyle fest. Siehe logging.apache.org/log4net/release/config-examples.html unter RollingFileAppender. "Beispielsweise wird jeden Tag ein Datumsmuster von" yyyyMMdd "angezeigt. Eine Liste der verfügbaren Muster finden Sie unter System.Globalization.DateTimeFormatInfo."
Ryan Buddicom
@rbuddicom Ja, aber die Frage ist, wie die Dateierweiterung erhalten werden kann.
Fourat
Ich weiß, Allan hat den Zweck von 'value = "ddMMyyyy"' in Frage gestellt. Ihr Kommentar "Ich denke, datePattern ist für den Dateinamen" ist in dieser Hinsicht falsch.
Ryan Buddicom
0
Der erweiterte Konfigurationsabschnitt in einer vorherigen Antwort mit
......<rollingStyle value="Composite"/>......
aufgelistete Werke, aber ich musste nicht verwenden
<staticLogFileName value="false"/>
. Ich denke, der RollingAppender muss diese Einstellung (logisch) ignorieren, da die Datei per Definition jeden Tag neu erstellt wird, wenn die Anwendung neu gestartet / wiederverwendet wird. Möglicherweise ist es für einen sofortigen Rollover jedes Mal wichtig, wenn die Anwendung gestartet wird.
Für mich würde es ohne den <staticLogFileName value = "false" />
nurettin
Ich musste auch staticLogFileName auf false setzen, sonst würde es nicht protokollieren
oonyalo
0
Ich habe die Konfiguration in den Code verschoben, um eine einfache Änderung von CI mithilfe der Systemvariablen zu ermöglichen. Ich habe diesen Code für den Dateinamen verwendet und das Ergebnis ist 'Log_03-23-2020.log'.
Antworten:
Verwenden Sie in Ihrer Log4net-Konfigurationsdatei den folgenden Parameter mit dem RollingFileAppender:
quelle
<preserveLogFileNameExtension value="true" />
ist die richtige Syntax und dies ist eine großartige Antwort. Wie ist der Verlust entstanden, darf ich fragen?quelle
Für einen RollingLogFileAppender benötigen Sie außerdem folgende Elemente und Werte:
quelle
Mit Log4Net 1.2.13 verwenden wir die folgenden Konfigurationseinstellungen, um die Datums- und Uhrzeitangabe im Dateinamen zuzulassen.
<file type="log4net.Util.PatternString" value="E:/logname-%utcdate{yyyy-MM-dd}.txt" />
Welche Dateien in der folgenden Konvention bereitstellen:
logname-2015-04-17.txt
Daher ist es normalerweise am besten, Folgendes zu haben, um sicherzustellen, dass Sie 1 Protokoll pro Tag halten.
Wenn die Dateigröße ein Problem darstellt, können im Folgenden 500 Dateien mit einer Größe von 5 MB verwendet werden, bis ein neuer Tag erscheint. CountDirection ermöglicht die aufsteigende oder absteigende Nummerierung von Dateien, die nicht mehr aktuell sind.
quelle
Am Ende habe ich Folgendes verwendet (beachten Sie den Dateinamen '.log' und die einfachen Anführungszeichen um 'myfilename_'):
Das gibt mir:
quelle
preserveLogFileNameExtension
funktioniert nicht für frühere Versionen von log4net (z. B. v1.2.10), wie hierIch habe alle Antworten ausprobiert, aber es fehlte immer etwas und funktionierte nicht wie erwartet für mich.
Dann habe ich ein bisschen mit den Hinweisen in jeder Antwort experimentiert und war mit der folgenden Einstellung erfolgreich:
Das Problem mit anderen Parameterkombinationen war, dass die neueste Datei nicht über das Zeitmuster verfügte oder dass das Zeitmuster so angehängt wurde, dass
.log20171215
eine neue Dateizeit (und ein neuer Dateityp) erstellt wurde! jeden Tag ) - oder beide Probleme auftraten.Mit dieser Einstellung erhalten Sie jetzt Dateien wie diese:
LOG4NET_Sample_Activity-20171215.log
Welches ist, was ich wollte.
Zusammenfassen:
Fügen Sie das Datumsmuster nicht in das
<file value=...
Attribut ein, sondern definieren Sie es einfach imdatePattern
.Stellen Sie sicher, dass Sie das
preserveLogFileNameExtension
Wertattribut auf gesetzt habentrue
.Stellen Sie sicher, dass Sie den
staticLogFileName
Wert auf eingestellt habenfalse
.Stellen Sie den Attributwert
rollingStyle
auf .Date
quelle
So behalten Sie die Dateierweiterung bei:
quelle
%date{yyyyMM}
undvalue="ddMMyyyy"
? Welches ist das Datum des Inkrafttretens?Der erweiterte Konfigurationsabschnitt in einer vorherigen Antwort mit
aufgelistete Werke, aber ich musste nicht verwenden
. Ich denke, der RollingAppender muss diese Einstellung (logisch) ignorieren, da die Datei per Definition jeden Tag neu erstellt wird, wenn die Anwendung neu gestartet / wiederverwendet wird. Möglicherweise ist es für einen sofortigen Rollover jedes Mal wichtig, wenn die Anwendung gestartet wird.
quelle
Ich habe die Konfiguration in den Code verschoben, um eine einfache Änderung von CI mithilfe der Systemvariablen zu ermöglichen. Ich habe diesen Code für den Dateinamen verwendet und das Ergebnis ist 'Log_03-23-2020.log'.
quelle