Відповіді:
У своєму конфігураційному файлі Log4net використовуйте наступний параметр із RollingFileAppender:
<param name="DatePattern" value="dd.MM.yyyy'.log'" />
<preserveLogFileNameExtension value="true" />
- правильний синтаксис, і це чудова відповідь. Як сталася втрата, можна запитати?
<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>
Для RollingLogFileAppender вам також потрібні такі елементи та значення:
<rollingStyle value="Date" />
<staticLogFileName value="false" />
Використовуючи Log4Net 1.2.13, ми використовуємо наступні параметри конфігурації, щоб дозволити час дати в імені файлу.
<file type="log4net.Util.PatternString" value="E:/logname-%utcdate{yyyy-MM-dd}.txt" />
Які надаватимуть файли у наступній конвенції: logname-2015-04-17.txt
З цим зазвичай краще мати наступне, щоб забезпечити ведення 1 журналу на день.
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />
Якщо розмір файлу викликає занепокоєння, наступне дозволяє отримати 500 файлів розміром 5 МБ до появи нового дня. CountDirection дозволяє нумерацію файлів, які вже не є поточними, у зростаючій чи низхідній кількості.
<maxSizeRollBackups value="500" />
<maximumFileSize value="5MB" />
<rollingStyle value="Composite" />
<datePattern value="yyyyMMdd" />
<CountDirection value="1"/>
<staticLogFileName value="true" />
Я в кінцевому рахунку використовував (зверніть увагу на ім'я файлу ".log" та одиничні лапки навколо "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" />
Це дає мені:
myfilename_2015-09-22.log
myfilename_2015-09-23.log
.
.
preserveLogFileNameExtension
не працює для більш ранніх версій log4net (наприклад, v1.2.10), як це описано тут
Я спробував усі відповіді, але завжди щось бракувало і не функціонувало так, як очікувалося для мене.
Тоді я трохи експериментував із підказками, наведеними у кожній відповіді, і був успішним у наступному налаштуванні:
<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>
Проблема з іншими комбінаціями параметрів полягала в тому, що останній файл не мав часового шаблону або що додається часовий шаблон, .log20171215
який створює новий час файлу (і новий тип файлу! ) Щодня - або з'являються обидві проблеми.
Тепер за допомогою цього налаштування ви отримуєте такі файли:
LOG4NET_Sample_Activity-20171215.log
чого я хотів.
Узагальнити:
Не ставте шаблон <file value=...
атрибуту дати, а лише визначте його в datePattern
.
Переконайтеся , що у вас є preserveLogFileNameExtension
значення набір атрибутів для true
.
Переконайтеся , що у вас є staticLogFileName
значення набір для false
.
Встановіть значенняrollingStyle
атрибута на .Date
Щоб зберегти розширення файлу:
<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}
і value="ddMMyyyy"
? яка ефективна схема дати?
Розширений розділ конфігурації у попередній відповіді з
...
...
<rollingStyle value="Composite" />
...
...
перераховані твори, але мені не довелося користуватися
<staticLogFileName value="false" />
. Я думаю, що RollingAppender повинен (логічно) ігнорувати це налаштування, оскільки за визначенням файл переробляється щодня, коли програма перезапускається / повторно використовується. Можливо, це має значення для негайного перекидання кожного разу, коли програма починається.
Я перемістив конфігурацію до коду, щоб дозволити просту модифікацію з CI за допомогою системної змінної. Я використовував цей код для імені файлу, і результат "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);