2012-07-29 22 views

cevap

4

sürü O log4net gelen "kutunun dışında" desteklenmemektedir. Ancak, RollingFileAppender'ı kullanabilir ve günlük dosyasını temizlemek/silmek için manuel bir sınıf/yöntem oluşturabilirsiniz. Başvuru için

, Log4Net: set Max backup files on RollingFileAppender with rolling Date

başka bir yaklaşım aracılığıyla günlük dosyası üzerinde minimal kilitleme düzeyini ayarlamak olacaktır kilitli dosyayı önlemek için: çok

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
+0

Teşekkürler! ancak dosyayı silmeye çalıştığımda, bir istisna alıyorum çünkü log4net dosyayı yakalar. Log dosyasını log4net'ten nasıl ayırabilirim? –

+1

Silmeden önce CloseFile() yöntemini kullanabilirsiniz. – Darek

+0

Sanırım bu ayrı bir soru ama Darek'in önerdiği gibi. Bunun nasıl işlediğini bize bildirin ve eğer bu sizin için işe yararsa cevaplandı olarak işaretlemeyi unutmayın. – Seany84

6

ben bu sorunu vardı.

Sen config bu gerekir:

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
+0

Tam olarak aradığım şey. – cdmckay

+0

Mükemmel! Basit, –

+0

'u beğeniyorum Bunun bir maliyetle geldiğini sanıyorum, belki birileri burada yorum yapabilir. Bunun çalışması için Log4Net muhtemelen dosyayı kapatır ve dosya tanıtıcıyı serbest bırakır. Bu maliyetli bir işlemdir çünkü bir sonraki yazıda yeni bir dosya tanıtıcısı tahsis edilmesi ve ayrıca dosyanın açılması gerekir. Bu "mükemmel" görünse de, büyük olasılıkla bir performans isabetine neden olur. – Jazimov

2

Teşekkürler çocuklar ben günlüğü net başarılı.

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 

günlük dosyası temizlemek kodudur: Günlük yapılandırma dosyasının appender bloğunda O satırı eklendi

 RollingFileAppender fileAppender = LogManager.GetRepository() 
         .GetAppenders().FirstOrDefault(appender => appender is RollingFileAppender) as RollingFileAppender; 


     if (fileAppender != null && File.Exists(((RollingFileAppender)fileAppender).File)) 
     { 
      string path = ((RollingFileAppender)fileAppender).File; 
      log4net.Appender.FileAppender curAppender = fileAppender as log4net.Appender.FileAppender; 
      curAppender.File = path; 

      FileStream fs = null; 
      try 
      { 
       fs = new FileStream(path, FileMode.Create); 
      } 
      catch(Exception ex) 
      { 
       (log4net.LogManager.GetLogger(this.GetType())).Error("Could not clear the file log", ex); 
      } 
      finally 
      { 
       if (fs != null) 
       { 
        fs.Close(); 
       } 

      } 
     } 

tüm

+0

Cevabımı gör. Sizi işaret ettiğim yönün bu olduğuna inanıyorum.Sevindim, sıraladım. – Seany84

1

varsa teşekkür ederim don Minimal bir kilidin olmasının performansla ilgili olumsuz etkilerini görmek (bkz. answer), daha sonra geçici olarak küçük bir kilit kullanmak, dosyaları silmek ve daha sonra varsayılan davranış. Yalnızca RollingFileAppenders kullandığınız

Örnek:

// Release the lock on the log4net log files 
var appenders = log4net.LogManager.GetRepository().GetAppenders(); 
foreach (var appender in appenders) 
{ 
    var rollingFileAppender = appender as log4net.Appender.RollingFileAppender; 
    if (rollingFileAppender != null) 
    { 
     rollingFileAppender.ImmediateFlush = true; 
     rollingFileAppender.LockingModel = new log4net.Appender.FileAppender.MinimalLock(); 
     rollingFileAppender.ActivateOptions(); 
    } 
} 

dosyaları artık serbesttir sorunsuz silinecek.

0

Basitçe uygulamanın başlangıcında komutu

File.WriteAllText("C:/Users.../log.xml", ""); 

kullanın.

İlgili konular