Log4net ile çalışıyorum. GUI'mde kullanıcı bu düğmeye tıkladığında, kayıt dosyasının temizleneceği bir düğme eklemek istiyorum. Bunu nasıl yapabilirim?Log4net günlük dosyasını nasıl temizleyebilirim?
Teşekkür
Log4net ile çalışıyorum. GUI'mde kullanıcı bu düğmeye tıkladığında, kayıt dosyasının temizleneceği bir düğme eklemek istiyorum. Bunu nasıl yapabilirim?Log4net günlük dosyasını nasıl temizleyebilirim?
Teşekkür
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" />
ben bu sorunu vardı.
Sen config bu gerekir:
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
Tam olarak aradığım şey. – cdmckay
Mükemmel! Basit, –
'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
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
Cevabımı gör. Sizi işaret ettiğim yönün bu olduğuna inanıyorum.Sevindim, sıraladım. – Seany84
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.
Basitçe uygulamanın başlangıcında komutu
File.WriteAllText("C:/Users.../log.xml", "");
kullanın.
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? –
Silmeden önce CloseFile() yöntemini kullanabilirsiniz. – Darek
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