2010-11-23 21 views
18

C# ile yazılmış bir windows hizmet programında log4net RollingFileAppender kullanıyorum. Günlükler dizinindeki dosyaların sayısı ve boyutu çok hızlı büyüyor, temizlemeye ihtiyaç duyuyor. Yapılandırma aşağıdaki gibidir:Can Log4Net Günlük Dosyalarını Otomatik Olarak Silebilir mi?

<appender name="Rolling Log" type="log4net.Appender.RollingFileAppender"> 
<file value="..\logs\MyProgram.%cs{instanceName}.log" /> 
<appendToFile value="true" /> 
<rollingStyle value="Composite" /> 
<datePattern value=".yyyy-MM-dd.lo\g" /> 
<maxSizeRollBackups value="10" /> 
<maximumFileSize value="150MB" /> 
<layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date [%-5level] %property{remoteUser} [%threadIdentity] %type{1}.%method - %message%newline%exception" /> 
</layout> 

Sadece kütüklerden 30 gün devam etmek istiyorum. Günlükleri otomatik olarak silmek için log4net'i nasıl yapılandırabilirim? Log4net üzerinden mevcut değilse, hangi çözümlere sahip olacağım?

Önceden teşekkür ederiz. Bazı yardimlar için

cevap

-1

This. RollingFileAppender bölümünde İşte

+3

O zaten RollingFileAppender'ı kullanıyor ve bunu yapıp yapamayacağınız konusunda bu belgede hiçbir bilgi yok. – steinar

+1

Bunu yapacak bir şey yok. –

8

arayın aslında aynı şeyi sorar SO burada başka bir soru şudur: Log4Net: set Max backup files on RollingFileAppender with rolling Date

konsensüs log4net doğrudan desteklemediği oldu. Bir poster, log4net'in kaynak kodu deposunda uygulandığını ancak henüz piyasaya sürülmediğini söylüyor. Başka bir poster, eski dosyaları düzenli aralıklarla temizlemek için kullandığı bazı kodları gösterir.

+0

Bu seçenek bana çekici geliyor çünkü RollingFileAppender'ı geçersiz kılmaktan daha kolay görünüyor. Şimdi Quartz.Net gibi zamanlayıcı tarafından tetiklenen bir günlük bakım işi eklemeyi planlıyorum. – tonyjy

+1

@jeff'in cevabında oldukça iyi bir çözüm olduğunu düşündüm: http://stackoverflow.com/questions/95286/log4net-set-max-backup-files-on-rollingfileappender-with-rolling-date/2916628#2916628 . Aslında bir dosyayı (ya da dosyaları) silmenin ya da yapma zamanının olup olmadığını görmek için uygulama başlangıcında kontrol etme. Uygulamanız çok uzun sürmüyorsa (bir seferde 30 günden uzun olmamak kaydıyla), yaklaşımı yeterli olabilir. – wageoghe

4

Emin olduğum halde, varolan eklenti ile yapamayacağınızdan eminim. (Eğer daha fazla denetim istiyorsanız, alt sınıf FileAppender ya)

  1. RollingFileAppender sınıflara Kendi appender oluşturun:

    Ancak, iki seçenek var. Ardından, bu ekleyiciyi kullanmak için yapılandırma dosyanızı değiştirin (ek öğeyi değiştirin).

  2. x günden eski dosyaları silen bir .bat dosyası oluşturun (bkz: Batch file to delete files older than N days). Ardından, bu yarasa dosyasını çalıştıran Windows'ta (http://support.microsoft.com/kb/308569) bir görev oluşturun. her gün.
+1

İlk yaklaşımı daha çok beğeniyorum. İkinci yaklaşım benim mevcut süreçten daha fazla dağıtım gerektiriyor gibi görünüyor ve izlemek kolay değil. – tonyjy

İlgili konular