2010-02-14 14 views
30

Şu anda günlüğe kaydetme için log4net kullanarak bir ASP.Net-MVC Uygulaması yapıyorum, ancak günlüğe kaydedici sadece rastgele durmuş gibi görünüyor. Bir süre için mutlu bir şekilde oturum açacak ve sonra durup bir süre sonra tekrar başlayacaktır. Günlüğe kaydetmeyi sürdürdüğünden bile emin değilim. Sadece bir kaç mesajdan bahsetmiyorum - bazen bir saat gibi uzun bir süre yok oluyor.Log4net, kayıt işlemini rasgele durdurur.

Neden durup böyle başlasın? Bunu, onu olduğu gibi rasgele durmayacak şekilde düzgün şekilde nasıl yapılandırmalıyım?

İşte benim yapılandırma:

<log4net debug="true"> 
<appender name="RollingLogFileAppender" 
     type="log4net.Appender.RollingFileAppender"> 

    <file value="..\Logs\\CurrentLog.txt" /> 
    <appendToFile value="true" /> 
    <datePattern value="yyyyMMdd" /> 

    <rollingStyle value="Date" /> 
    <filter type="log4net.Filter.LevelRangeFilter"> 
    <acceptOnMatch value="true" /> 

    <levelMin value="INFO" /> 
    <levelMax value="FATAL" /> 
    </filter> 

    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern 
    value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" /> 
    </layout> 

</appender> 

<root> 
    <level value="INFO" /> 
    <appender-ref ref="RollingLogFileAppender" /> 
</root> 

+1

(değil tasarım gereği, yeniden yapılandırarak ..) sorunların bu tür neden olduğunu - http://neilkilbride.blogspot.com.au bakın /2008/04/configure-log4net-only-once.html – Jonno

+0

Bir neden bulursanız, sorunun nedenini açıklayan bir cevap veya yorum eklemenizi ister misiniz? –

+0

Evet, Mark'ın söylediği gibi sorununuza neyin yol açtığını bilmek güzel olurdu. Bu arada, aynı sorunu yaşıyordum ve benim için çalışılan ADONetAppender yapılandırması altında ReconnectOnError'ı true olarak ayarlıyordum. – Jportelas

cevap

56

Log4Net olacak fail silently şey yanlış gider ve onun appenders yazma verememesi halinde. Bu aslında iyi bir şeydir, çünkü bu başarısız bir günlük kaydı, aksi halde sağlıklı bir sistemi düşürmeyecektir, ancak bir şey beklediğiniz gibi kayıt olmadığında can sıkıcı olabilir.

En iyi seçeneğiniz, bazı arıza teşhislerini yapmak için log4net'in kendi internal logging özelliğini açmak ve (nedense) neden başarısız olduğunu öğrenmek. uygulamanızın yapılandırma dosyası eklenti Yani

:

<configuration> 
    ... 
    <system.diagnostics> 
     <trace autoflush="true"> 
      <listeners> 
       <add 
        name="textWriterTraceListener" 
        type="System.Diagnostics.TextWriterTraceListener" 
        initializeData="C:\tmp\log4net.txt" /> 
      </listeners> 
     </trace> 
    </system.diagnostics> 
    ... 
</configuration> 

bir bu yakalamak için: ekleyebilir, böylece System.Diagnostics.Trace gönderilen alır iç günlük, yanacaktır

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
     <add key="log4net.Internal.Debug" value="true"/> 
    </appSettings> 
</configuration> 

dosya.

+1

Böyle bir yapılandırma dosyasının daha dolulu bir örneğiniz var mı? Çok sayıda varyasyon denedim ve XML hatalarını XmlSerializationReader'dan almaya devam ediyorum. Sadece boş bir 'etiketi bile istisna ile arasındaki farktır. –

+0

Aynı sorunu yaşıyorum ve benim durumumda, standart bir dosya iletişim kutusunu açtığımda, [Kutu] (https://box.com) simge yer paylaşımı DLL'si işlem içi log4net.config üzerine yazıyormuş gibi görünüyor. kendi ile. –

+0

Bu aslında iyi bir şey DEĞİL, çünkü sistem izleme ve hata bildirim araçlarına bağlı olabilir ve günlüğe kaydetme durursa, bir istisna olabileceğini bilmenin bir yolu yoktur.Bu tuhaf kayıt aracından nefret ediyorum, her zaman şirketim hangi şirkete giderse başım ağrıyor, hangi versiyonu kullanıyorsa, her zaman başım ağrıyor. Crappy geliştiricilerin berbat ürünü .. – sotn

0

Uygulama yaşam döngüsünde olabildiğince erken bir test günlüğü iletisi gönderirseniz, basit bir LogManager.GetLogger("Init").Info("Starting logging") bunu yapar. Başvurulan bazı kodlar ilk önce günlüğe kaydetmeye başlarsa, başlatma işleminizin bir kısmı başarısız olabilir (başka bir düzenekden gelen ayarları yüklediğinden, yalnızca bir kez yapar).

burada oku: https://logging.apache.org/log4net/release/faq.html#first-log benim durumumda o günlüğü sıfırlama edildi yılında