Log4net menggulirkan nama file harian dengan tanggal di nama file

Jawaban:

103

Di file konfigurasi Log4net Anda, gunakan parameter berikut dengan RollingFileAppender:

<param name="DatePattern" value="dd.MM.yyyy'.log'" />
Mun
sumber
28
Tampaknya ini telah dipromosikan ke elemen konfigurasi: <datePattern value = "dd.MM.yyyy'.log '" /> Cheers!
longda
3
@mstaessen <preserveLogFileNameExtension value="true" />adalah sintaks yang benar dan ini adalah jawaban yang bagus. Bagaimana kerugian itu terjadi, bolehkah saya bertanya?
Larry B
1
Jika saya mengingatnya dengan benar, hasilnya seperti ini. Saat startup, log4net akan menghasilkan nama file pertama dalam urutan bergulir. Ini akan mendeteksi bahwa file itu sudah ada dan kemudian akan memutuskan untuk menggulung ke file kedua, tetapi ketika file itu juga sudah ada, itu tidak memutuskan untuk menggulung tetapi malah membersihkannya dan menimpa semua yang ada di file log kedua itu. Ini berjalan sama sekali tanpa disadari sampai Anda membutuhkan log dari jangka waktu yang dibersihkan ...
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>
Nonkichi
sumber
1
Saya pikir Anda harus menyoroti poin utama dari parameter apa untuk menyelesaikan masalah seperti yang dilakukan @Mun. Namun, saya juga mendukung jawaban Anda.
RDeveloper
1
Itu adalah elemen datePattern, dalam hubungannya dengan elemen staticLogFileName (dan perhatikan atribut nilai untuk elemen file) yang bekerja untuk saya
Michhes
Jawaban lengkapnya!
Nagesh
32

Untuk RollingLogFileAppender, Anda juga membutuhkan elemen dan nilai berikut:

<rollingStyle value="Date" />
<staticLogFileName value="false" />
BobD
sumber
3
Ini berfungsi, tetapi menambahkan tanggal setelah ekstensi file. Misalnya saya mendapatkan file log seperti Error.log20111104 - Adakah yang tahu cara memformat nama file sedikit lebih baik?
LostNomad311
Berikut cara memformat nama file dengan lebih baik: stackoverflow.com/questions/615092/…
LostNomad311
untuk apa staticLogFileName digunakan? Saya hanya ingin file log digulung menjadi nama baru setelah hari berakhir. Saya ingin menggunakan monitor log yang melihat spesifik setiap waktu.
Minggu
22

Menggunakan Log4Net 1.2.13 kami menggunakan pengaturan konfigurasi berikut untuk memungkinkan tanggal waktu dalam nama file.

<file type="log4net.Util.PatternString" value="E:/logname-%utcdate{yyyy-MM-dd}.txt" />

Yang akan menyediakan file dalam konvensi berikut: logname-2015-04-17.txt

Dengan ini biasanya yang terbaik adalah memiliki yang berikut untuk memastikan Anda memegang 1 log per hari.

<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />

Jika ukuran file menjadi perhatian, berikut ini memungkinkan 500 file berukuran 5MB hingga hari baru muncul. CountDirection memungkinkan penomoran Ascending atau Descending dari file yang tidak lagi terkini.

 <maxSizeRollBackups value="500" />
 <maximumFileSize value="5MB" />
 <rollingStyle value="Composite" />
 <datePattern value="yyyyMMdd" />
 <CountDirection value="1"/>
 <staticLogFileName value="true" />
Jack Thorley
sumber
18

Saya akhirnya menggunakan (perhatikan nama file '.log' dan tanda kutip tunggal di sekitar '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" />

Ini memberi saya:

myfilename_2015-09-22.log
myfilename_2015-09-23.log
.
.
Njal
sumber
preserveLogFileNameExtensiontidak berfungsi untuk versi log4net sebelumnya (mis. v1.2.10) seperti yang dijelaskan di sini
Dmitry Karpenko
13

Saya sudah mencoba semua jawaban, tapi selalu ada yang kurang dan tidak berfungsi seperti yang diharapkan.

Kemudian saya bereksperimen sedikit dengan petunjuk yang diberikan di setiap jawaban dan berhasil dengan pengaturan berikut:

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

Masalah dengan kombinasi parameter lainnya adalah file terbaru tidak memiliki pola waktu, atau pola waktu ditambahkan .log20171215yang membuat waktu file baru (dan jenis file baru ! ) Setiap hari - atau kedua masalah muncul.

Sekarang dengan pengaturan ini Anda mendapatkan file seperti ini:

LOG4NET_Sample_Activity-20171215.log

itulah yang saya inginkan.


Untuk meringkas:

  • Jangan letakkan pola tanggal di <file value=...atribut, cukup tentukan di datePattern.

  • Pastikan Anda menyetel atribut preserveLogFileNameExtension nilai ketrue .

  • Pastikan Anda menyetel staticLogFileName nilainya kefalse .

  • Mengatur rollingStyleatribut nilai untuk Date.

Matt
sumber
Anda juga dapat mengatur rollingStyle ke Composite, yang menggulung pada tanggal dan ukuran.
Simon Tewsi
1
Bekerja dengan baik. Saya juga akan menambahkan ringkasannya: Pastikan Anda memiliki nilai staticLogFileName yang disetel ke false
Randall Flagg
5

Untuk mempertahankan ekstensi file:

<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>
Fourat
sumber
kenapa ada %date{yyyyMM}dan value="ddMMyyyy" ? yang mana pola tanggal efektif?
Allan Ruin
Saya pikir datePattern adalah untuk nama file tetapi% date {yyyyMM} adalah untuk direktori induk (saya menginginkannya seperti itu)
Fourat
Atribut datePattern menyetel periode bergulir untuk Date rollingStyle. Lihat logging.apache.org/log4net/release/config-examples.html di bawah RollingFileAppender. "Misalnya, pola tanggal" yyyyMMdd "akan bergulir setiap hari. Lihat System.Globalization.DateTimeFormatInfo untuk daftar pola yang tersedia."
Ryan Buddicom
@rbuddicom ya tetapi pertanyaannya adalah tentang bagaimana cara mempertahankan ekstensi file.
Fourat
Aku tahu, Allan mempertanyakan tujuan dari 'value = "ddMMyyyy"'. Komentar Anda "Saya pikir datePattern adalah untuk nama file" salah dalam hal itu.
Ryan Buddicom
0

Bagian konfigurasi yang diperluas dalam respons sebelumnya dengan

 ...
 ...
 <rollingStyle value="Composite" />
 ...
 ...

karya yang terdaftar tapi saya tidak harus menggunakan

<staticLogFileName value="false" /> 

. Saya pikir RollingAppender harus (secara logis) mengabaikan pengaturan itu karena menurut definisi file akan dibangun kembali setiap hari ketika aplikasi restart / digunakan kembali. Mungkin itu penting untuk rollover segera SETIAP kali aplikasi dimulai.

AllenM
sumber
Bagi saya, ini tidak akan berfungsi tanpa <staticLogFileName value = "false" />
nurettin
saya juga, harus mengatur staticLogFileName ke false jika tidak maka tidak akan masuk
oonyalo
0

Saya memindahkan konfigurasi ke kode untuk mengaktifkan modifikasi mudah dari CI menggunakan variabel sistem. Saya menggunakan kode ini untuk nama file dan hasilnya adalah '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);
Parag Bangad
sumber