Чтобы построить из ответа выше, используя SortByFolderFileAppender.
Вот так мы решили проблему, используя дату прокрутки для имен файлов журналов. Я изменил staticLogFileName на true, чтобы все имя файла передавалось в метод OpenFile.
Если имя файла оканчивается на «.log», то ничего не нужно добавлять. Я предполагаю, что произошла какая-то блокировка, и я хочу, чтобы log4net снова попытался использовать то же имя файла, надеясь, что предыдущая блокировка была снята.
Хотя я не уверен, что это может привести к бесконечному вызову OpenFile, если файл заблокирован и не отпустит его. Мы создали веб-сервис, используя шаблон потребителя производителя, чтобы регистрировать все в одном месте из всех приложений в системе, которых в настоящее время десять и продолжает расти.
Нам не нужно включать log4net ни в одно из других приложений, но нам нужно было создать класс веб-клиента, доступный для всех приложений, чтобы использовать его для входа в веб-службу.
Результат для имени файла - «Журналы \ Клиент \ 2017 \ 11 \ 08.log» и, очевидно, меняется каждый день.
protected override void OpenFile( string fileName, bool append )
{
// append "\yyyy\mm\dd.log" to create the correct filename.
if ( !fileName.EndsWith( ".log") )
fileName = $@"{fileName}\{DateTime.Now:yyyy\\MM\\dd}.log";
base.OpenFile( fileName, append );
}
Модификация конфигурации сверху.
<appender name="xxxRollingFileAppender" type="namespace.xxxRollingFileAppender">
<file value="Logs\Client"/>
<staticLogFileName value="true"/>
<appendToFile value="true"/>
<maxSizeRollBackups value="40"/>
<maximumFileSize value="1MB"/>
<encoding value="utf-8"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{HH:mm:ss.fff}|%-5level|%message%newline"/>
</layout>
</appender>