Antworten:
Verwenden Sie in Ihrer Log4net-Konfigurationsdatei den folgenden Parameter mit dem RollingFileAppender:
<param name="DatePattern" value="dd.MM.yyyy'.log'" />
<preserveLogFileNameExtension value="true" />
ist die richtige Syntax und dies ist eine großartige Antwort. Wie ist der Verlust entstanden, darf ich fragen?
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<file value="logs\" />
<datePattern value="dd.MM.yyyy'.log'" />
<staticLogFileName value="false" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="5MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
Für einen RollingLogFileAppender benötigen Sie außerdem folgende Elemente und Werte:
<rollingStyle value="Date" />
<staticLogFileName value="false" />
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.
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />
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.
<maxSizeRollBackups value="500" />
<maximumFileSize value="5MB" />
<rollingStyle value="Composite" />
<datePattern value="yyyyMMdd" />
<CountDirection value="1"/>
<staticLogFileName value="true" />
Am Ende habe ich Folgendes verwendet (beachten Sie den Dateinamen '.log' und die einfachen Anführungszeichen um 'myfilename_'):
<rollingStyle value="Date" />
<datePattern value="'myfilename_'yyyy-MM-dd"/>
<preserveLogFileNameExtension value="true" />
<staticLogFileName value="false" />
<file type="log4net.Util.PatternString" value="c:\\Logs\\.log" />
Das gibt mir:
myfilename_2015-09-22.log
myfilename_2015-09-23.log
.
.
preserveLogFileNameExtension
funktioniert nicht für frühere Versionen von log4net (z. B. v1.2.10), wie hier
Ich 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:
<appender name="RollingActivityLog" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="C:\temp\LOG4NET_Sample_Activity.log" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<staticLogFileName value="false" />
<preserveLogFileNameExtension value="true" />
<datePattern value="-yyyyMMdd" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-5level - %message%newline" />
</layout>
</appender>
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 im datePattern
.
Stellen Sie sicher, dass Sie das preserveLogFileNameExtension
Wertattribut auf gesetzt haben true
.
Stellen Sie sicher, dass Sie den staticLogFileName
Wert auf eingestellt haben false
.
Stellen Sie den AttributwertrollingStyle
auf .Date
So behalten Sie die Dateierweiterung bei:
<log4net>
<root>
<level value="DEBUG"/>
<appender-ref ref="RollingLogFileAppender"/>
</root>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="D:\\LogFolder\\%date{yyyyMM}\\SchT.log" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<maximumFileSize value="30MB" />
<staticLogFileName value="true" />
<preserveLogFileNameExtension value="true"/>
<datePattern value="ddMMyyyy" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
</log4net>
%date{yyyyMM}
und value="ddMMyyyy"
? Welches ist das Datum des Inkrafttretens?
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.
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'.
log4net.Repository.ILoggerRepository repository = LogManager.GetRepository(Assembly.GetEntryAssembly());
Hierarchy hierarchy = (Hierarchy)repository;
PatternLayout patternLayout = new PatternLayout();
patternLayout.ConversionPattern = "%date %level - %message%newline%exception";
patternLayout.ActivateOptions();
RollingFileAppender roller = new RollingFileAppender();
roller.AppendToFile = true;
roller.File = "Log_";
roller.DatePattern = "MM-dd-yyyy'.log'";
roller.Layout = patternLayout;
roller.MaxFileSize = 1024*1024*10;
roller.MaxSizeRollBackups = 10;
roller.StaticLogFileName = false;
roller.RollingStyle = RollingFileAppender.RollingMode.Composite;
roller.ActivateOptions();
hierarchy.Root.AddAppender(roller);