Учитывая, что прошло более десяти лет, и это все еще не поддерживается, я выбрал следующее решение переопределения RollingFileAppender
с необходимой функциональностью:
public class RollingDateAppender : RollingFileAppender {
public TimeSpan MaxAgeRollBackups { get; set; }
public RollingDateAppender()
: base() {
PreserveLogFileNameExtension = true;
StaticLogFileName = false;
}
protected override void AdjustFileBeforeAppend() {
base.AdjustFileBeforeAppend();
string LogFolder = Path.GetDirectoryName(File);
var CheckTime = DateTime.Now.Subtract(MaxAgeRollBackups);
foreach (string file in Directory.GetFiles(LogFolder, "*.log")) {
if (System.IO.File.GetLastWriteTime(file) < CheckTime)
DeleteFile(file);
}
}
}
Конфигурирование так же просто, какоригинальный класс:
roller = new RollingDateAppender {
AppendToFile = true,
File = ...;
MaxAgeRollBackups = TimeSpan.FromDays(7),
RollingStyle = RollingFileAppender.RollingMode.Date,
...
};
roller.ActivateOptions();
BasicConfigurator.Configure(roller);
Обратите внимание, что поиск *.log
файлов в каталоге журнала имеет смысл, только если используется PreserveLogFileNameExtension
или DatePattern
, чтобы включить расширение в конце имени файла,Если вам нужна другая схема именования, измените их синхронно.
(я использовал версию 2.0.8 log4net, более ранние версии не позволяли переопределить необходимую функцию.)