Log4net Rolling Daily nazwa pliku z datą w nazwie pliku


Odpowiedzi:


103

W pliku konfiguracyjnym Log4net użyj następującego parametru z RollingFileAppender:

<param name="DatePattern" value="dd.MM.yyyy'.log'" />

28
Wygląda na to, że został on przeniesiony do elementu konfiguracyjnego: <datePattern value = "dd.MM.yyyy'.log '" /> Pozdrawiam!
— longda

3
@mstaessen <preserveLogFileNameExtension value="true" />to poprawna składnia i to jest świetna odpowiedź. Jak doszło do straty, czy mogę zapytać?
— Larry B,

1
Jeśli dobrze pamiętam, tak było. Podczas uruchamiania log4net wygenerowałby pierwszą nazwę pliku w kolejności kroczącej. Wykryłby, że ten plik już istnieje, a następnie zdecydowałby się przenieść do drugiego pliku, ale gdy ten również już istnieje, nie decyduje się na przewinięcie, ale zamiast tego czyści go i nadpisuje wszystko w tym drugim pliku dziennika. Przechodzi zupełnie niezauważalnie, dopóki nie potrzebujesz dzienników wyczyszczonych ram czasowych ...
— mstaessen

207
<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>

1
Myślę, że powinieneś podkreślić główny punkt dotyczący tego, jaki parametr rozwiązać problem, tak jak zrobił to @Mun. Jednak głosowałem również za twoją odpowiedzią.
— RDeveloper,

1
To był element datePattern w połączeniu z elementem staticLogFileName (i zwróć uwagę na atrybut value dla elementu file), który działał dla mnie
— Michhes

Pełna odpowiedź!
— Nagesh

32

W przypadku RollingLogFileAppender potrzebujesz również tych elementów i wartości:

<rollingStyle value="Date" />
<staticLogFileName value="false" />

3
Działa, ale dodaje datę po rozszerzeniu pliku. Na przykład otrzymuję pliki dziennika, takie jak Error.log20111104 - Czy ktoś wie, jak sformatować nazwę pliku trochę lepiej?
— LostNomad311

Oto jak lepiej sformatować nazwę pliku: stackoverflow.com/questions/615092/ ...
— LostNomad311

do czego służy staticLogFileName? Chcę, aby plik dziennika został zmieniony pod nową nazwą dopiero po zakończeniu dnia. Chcę używać monitora dziennika, który za każdym razem sprawdza określony.
— Niedziela,

22

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" />

18

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
.
.

preserveLogFileNameExtensionnie działa we wcześniejszych wersjach log4net (np. wersja 1.2.10), jak opisano tutaj
— Dmitry Karpenko

13

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, .log20171215któ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


Możesz również ustawić wartość rollingStyle na Composite, która będzie odtwarzana zarówno według daty, jak i rozmiaru.
— Simon Tewsi

1
Działa świetnie. W podsumowaniu chciałbym również dodać: Upewnij się, że masz ustawioną wartość staticLogFileName na false
— Randall Flagg

5

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>

dlaczego są %date{yyyyMM}i value="ddMMyyyy" ? jaki jest wzór daty wejścia w życie?
— Allan Ruin

Myślę, że datePattern jest dla nazwy pliku, ale% date {yyyyMM} dotyczy katalogu nadrzędnego (chciałem to w ten sposób)
— Fourat

Atrybut datePattern ustawia okres kroczący dla Date rollingStyle. Zobacz logging.apache.org/log4net/release/config-examples.html w sekcji RollingFileAppender. „Na przykład wzorzec daty„ rrrrMMdd ”będzie przewijany każdego dnia. Listę dostępnych wzorców można znaleźć w sekcji System.Globalization.DateTimeFormatInfo.”
— Ryan Buddicom

@rbuddicom tak, ale pytanie dotyczy tego, jak zachować rozszerzenie pliku.
— Fourat

Wiem, Allan zakwestionował cel „value =" ddMMyyyy "”. Twój komentarz „Myślę, że datePattern dotyczy nazwy pliku” jest pod tym względem niepoprawny.
— Ryan Buddicom,

0

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.


Dla mnie to nie zadziałałoby bez <staticLogFileName value = "false" />
— nurettin

ja też, musiałem ustawić staticLogFileName na false, w przeciwnym razie nie zostanie zarejestrowane
— oonyalo

0

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);
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.