Nie można archiwizować plików bez pisania kodu, przepraszam. Jednak kod nie byłby bardzo skomplikowany.
Możesz utworzyć niestandardowego aplikanta dziedziczącego po RollingFileAppender
i zastąpić metodę AdjustFileBeforeAppend
w celu dodania zachowania do toczenia pliku. Oto istniejąca metoda, która wyrzuca plik dla pliku RollingFileAppender
, który można przesłonić, aby dodać archiwizację.
Użyj właściwości File
znaleźć proces nazwa pliku to
// log4net.Appender.RollingFileAppender
protected virtual void AdjustFileBeforeAppend()
{
var fileToZip = File; // save the current file
if (this.m_rollDate)
{
DateTime now = this.m_dateTime.Now;
if (now >= this.m_nextCheck)
{
this.m_now = now;
this.m_nextCheck = this.NextCheckDate(this.m_now, this.m_rollPoint);
this.RollOverTime(true);
// zip the file if roll occurs here
}
}
if (this.m_rollSize)
{
if (this.File != null && ((CountingQuietTextWriter)base.QuietWriter).Count >= this.m_maxFileSize)
{
this.RollOverSize();
// zip the file if roll occurs here
}
}
}
Alternatywnie można znaleźć istniejący appender, że robi to, co chcesz, ale ja nie znam żadnego.
Wolę podnosić komentarz @ stuartda do odpowiedzi, ponieważ to, co proponuje, jest dość eleganckie. można po prostu zastąpić AdjustFileBeforeAppend
w ten sposób:
protected override void AdjustFileBeforeAppend() {
var previousFile = File;
base.AdjustFileBeforeAppend();
if (File != previousFile) { // zip the file }
}
Jest całkiem zgrabny sposób to zrobić, ale może chcesz być w stanie rozróżnić obu rodzajów bułek (czyli data i rozmiar). Na przykład tylko skompresowanie daty w celu zachowania plików dla zakresu dat.
Aby uniknąć konieczności wymiany istniejącego kodu w sposób, który nie jest najlepszy pomysł na dłuższą metę może to być zrobione tak: protected override void AdjustFileBeforeAppend() { var previousFile = Plik; base.AdjustFileBeforeAppend(); if (File! = PreviousFile) { // zip plik } } – stuartd
To bardzo dobry pomysł! Myślę, że nie zaszkodzi rozróżniać między toczeniem rozmiaru a datowaniem, ponieważ możesz chcieć skompresować pliki na ten sam dzień razem. Szkoda, że nie możemy nagradzać komentatorów – samy
log4net jest zainspirowany log4j. Następca log4j nazywa się logback i ma wbudowane skompresowanie w konfiguracji, więc ma dokładnie to, czego ty (i ja) chcesz. Teraz potrzebujemy inspirowanego zespołu do napisania logback.NET! –