Jawaban:
Di file konfigurasi Log4net Anda, gunakan parameter berikut dengan RollingFileAppender:
<param name="DatePattern" value="dd.MM.yyyy'.log'" />
<preserveLogFileNameExtension value="true" />
adalah sintaks yang benar dan ini adalah jawaban yang bagus. Bagaimana kerugian itu terjadi, bolehkah saya bertanya?
<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>
Untuk RollingLogFileAppender, Anda juga membutuhkan elemen dan nilai berikut:
<rollingStyle value="Date" />
<staticLogFileName value="false" />
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" />
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
.
.
preserveLogFileNameExtension
tidak berfungsi untuk versi log4net sebelumnya (mis. v1.2.10) seperti yang dijelaskan di sini
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 .log20171215
yang 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 rollingStyle
atribut nilai untuk Date
.
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>
%date{yyyyMM}
dan value="ddMMyyyy"
? yang mana pola tanggal efektif?
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.
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);