Odpowiedzi:
W pliku konfiguracyjnym Log4net użyj następującego parametru z RollingFileAppender:
<param name="DatePattern" value="dd.MM.yyyy'.log'" />
<preserveLogFileNameExtension value="true" />
to poprawna składnia i to jest świetna odpowiedź. Jak doszło do straty, czy mogę zapytać?
<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>
W przypadku RollingLogFileAppender potrzebujesz również tych elementów i wartości:
<rollingStyle value="Date" />
<staticLogFileName value="false" />
Korzystając z Log4Net 1.2.13, używamy następujących ustawień konfiguracyjnych, aby zezwolić na datę i godzinę w nazwie pliku.
<file type="log4net.Util.PatternString" value="E:/logname-%utcdate{yyyy-MM-dd}.txt" />
Który dostarczy pliki w następującej konwencji: logname-2015-04-17.txt
Dzięki temu zwykle najlepiej jest mieć następujące elementy, aby upewnić się, że trzymasz 1 dziennik dziennie.
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />
Jeśli rozmiar pliku jest problemem, poniższe zezwala na 500 plików o rozmiarze 5 MB do pojawienia się nowego dnia. CountDirection umożliwia rosnącą lub malejącą numerację plików, które nie są już aktualne.
<maxSizeRollBackups value="500" />
<maximumFileSize value="5MB" />
<rollingStyle value="Composite" />
<datePattern value="yyyyMMdd" />
<CountDirection value="1"/>
<staticLogFileName value="true" />
Skończyło się na użyciu (zwróć uwagę na nazwę pliku „.log” i pojedyncze cudzysłowy wokół „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" />
To daje mi:
myfilename_2015-09-22.log
myfilename_2015-09-23.log
.
.
preserveLogFileNameExtension
nie działa we wcześniejszych wersjach log4net (np. wersja 1.2.10), jak opisano tutaj
Wypróbowałem wszystkie odpowiedzi, ale zawsze czegoś brakowało i nie działało zgodnie z oczekiwaniami.
Następnie trochę poeksperymentowałem ze wskazówkami podanymi w każdej odpowiedzi i udało mi się z następującym ustawieniem:
<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>
Problem z innymi kombinacjami parametrów polegał na tym, że najnowszy plik nie miał wzorca czasu lub że wzorzec czasu był dodawany jako, .log20171215
który tworzył nowy czas pliku (i nowy typ pliku! ) Każdego dnia - lub pojawiały się oba problemy.
Teraz z tym ustawieniem otrzymujesz pliki takie jak ten:
LOG4NET_Sample_Activity-20171215.log
co chciałem.
Podsumowując:
Nie umieszczaj wzorca daty w <file value=...
atrybucie, po prostu zdefiniuj go w datePattern
.
Upewnij się, że masz ustawiony atrybut preserveLogFileNameExtension
valuetrue
.
Upewnij się, że masz ustawioną staticLogFileName
wartośćfalse
.
Ustaw wartośćrollingStyle
atrybutu na .Date
Aby zachować rozszerzenie pliku:
<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}
i value="ddMMyyyy"
? jaki jest wzór daty wejścia w życie?
Rozszerzona sekcja konfiguracji w poprzedniej odpowiedzi z
...
...
<rollingStyle value="Composite" />
...
...
wymienione prace, ale nie musiałem używać
<staticLogFileName value="false" />
. Myślę, że RollingAppender musi (logicznie) zignorować to ustawienie, ponieważ z definicji plik jest odbudowywany każdego dnia, gdy aplikacja jest ponownie uruchamiana / ponownie używana. Być może ma to znaczenie dla natychmiastowego przeniesienia za każdym razem, gdy aplikacja zostanie uruchomiona.
Przeniosłem konfigurację do kodu, aby umożliwić łatwą modyfikację z CI przy użyciu zmiennej systemowej. Użyłem tego kodu dla nazwy pliku, a wynik to „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);