Log4net sorunları nasıl izlenir


191

Log4net'i her zaman kullanıyorum, ama hiç anlamadığım bir şey, içeride neler olduğunu nasıl anlayacağım. Örneğin, projemde bir konsol ekleyicisi ve bir veritabanı ekleyicisi var. Veritabanı ve kodda birkaç değişiklik yaptım ve şimdi veritabanı ekleyicisi artık çalışmıyor. Sonunda nedenini bulacağım, ancak log4net içinde neler olduğunu görebilseydim çok yardımcı olurdu.

Log4net, sorunumun kaynağını belirlemeye çalışmak için görüntüleyebileceğim herhangi bir çıktı oluşturur mu?

Yanıtlar:


294

Öncelikle bu değeri uygulama yapılandırma dosyasında ayarlamanız gerekir:

<configuration>
   <appSettings>
      <add key="log4net.Internal.Debug" value="true"/>
   </appSettings>
</configuration>

Ardından, çıktıyı kaydetmek istediğiniz dosyayı belirlemek için aynı .config dosyasına aşağıdaki kodu ekleyebilirsiniz:

<configuration>
...

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

...
</configuration>

'Log4net dahili hata ayıklamasını nasıl etkinleştiririm?' Altında daha ayrıntılı bir açıklama bulabilirsiniz. içinde log4net SSS sayfasına .


10
Uygulamanızın altında çalıştığı işlemin, günlük metin dosyanızı oluşturmak istediğiniz yol üzerinde haklara sahip olduğundan emin olun (yukarıdaki örnekte "C: \ tmp \ log4net.txt")
NMrt

3
Dahili hata ayıklama zaman damgası yok gibi görünüyor
snit80

4
Ben değiştirildi C:\tmp\log4net.txtetmek C:\log4net.txt, o zaman metin dosyası oluşturabilir.
Frank Myat Per

6
Sadece eğlenceli bir yol bulduğum bir not. <configSections></configSections>Altındaki ilk giriş olduğundan emin olun <configuration>. Aksi takdirde bir hatayla karşılaşırsınız.
Nick

2
Bu, günlük dosyasındaki girdilerin zamanını göstermez. Ben ayar özelliklerini denedim traceOutputOptions="TimeStamp"ve traceOutputOptions="DateTime"içinde addetiketi ama günlük dosyası içeriği birşeyi değiştirmez. Birisi izleme günlüğü dosyasındaki her satır / giriş için zamanı göstermek üzere log4net'in nasıl ayarlanacağını biliyor mu?
Ulysses Alves

43

Bir log4net yapılandırma dosyası kullanıyorsanız, üst düğümü şu şekilde değiştirerek hata ayıklamayı da açabilirsiniz:

<log4net debug="true">

Yapılandırma yeniden yüklendiğinde ve izleme dinleyicinizin düzgün kurulduğu varsayılarak bu çalışır.


6
Bu bayrak etkinleştirildikten sonra - Visual Studio'nun Çıktı penceresinde log4net'ten tanı günlüklerini görebilirsiniz
Naren

24

Yukarıdaki yanıta ek olarak, c: \ tmp \ log4net.txt çıktısı yerine günlüğü gerçek zamanlı olarak görmek için bu satırı kullanabilirsiniz.

log4net.Util.LogLog.InternalDebugging = true;

Örneğin, bir konsol uygulamasında bunu ekleyebilir ve çıktıyı gerçek zamanlı olarak izleyebilirsiniz. Test ettiğiniz aplikatöre ne olduğunu görmek için küçük bir test demetinde log4net'in hata ayıklaması için iyidir.


8

Giriş noktanızın bulunduğu kök uygulamanın log4net'e bir şey kaydettiğinden emin olun. Şunlardan birini verin:

private static ILog logger = LogManager.GetLogger(typeof(Program));
static void Main(string[] args)
{
    logger.InfoFormat("{0} v.{1} started.", Assembly.GetExecutingAssembly().GetName().Name, Assembly.GetExecutingAssembly().GetName().Version.ToString());

2.0.8 ile ilginç bir durum yaşadım. Bir kütüphane projesi ve yeteneklerini gösterecek bir test exe projesi oluşturdum. Kütüphane projesi exe projesi gibi Log4net'i kullanacak şekilde ayarlandı. Exe proje config kaydetmek için assemblyinfo özniteliğini kullandı, ancak ben konsol veya günlük dosyası için hiçbir günlük çıkışı alıyordu. Log4net dahili hata ayıklama günlüğünü açtığımda, konsola bazı dahili iletiler yazdım, ancak yine de normal günlüklerimin hiçbiri yok. Hiçbir hata bildirilmiyordu. Yukarıdaki kodu programıma eklediğimde her şey çalışmaya başladı. Log4net düzgün bir şekilde ayarlanmış.


1
benim de kurtardı :-)
costa

2

Dahili günlük size yeterli bilgi vermezse, kaynak kodu oluşturmak ve hatalarını ayıklamak çok kolaydır . Bunu geliştirme projenizle karıştırmak istemiyorsanız, sadece bir mesaj kaydeden basit bir konsol uygulaması ekleyin, projenizin log4net.configbu uygulamaya kopyalayın ve söz konusu sınıfta hata ayıklayın.


2

Log4net 2.0.8'de log4net ile günlük kaydını ayrı bir DLL dosyasında yapmak mümkün görünmüyor. Bunu denediysem, sonuçlar çok garip: Artık hiçbir kayıt yapılmıyor. Ve log4net'in hata ayıklama seçeneği ile başlatılması hiçbir Hata göstermez.

K0D4'ün dediği gibi, ana modülünüzde log4net'e bir referansınız olmalı ve Programın başlangıcında bir kez çağırmalı ve her şey yolunda mı?

Log4net'in sonraki sürümünde, bu hata muhtemelen düzeltilecektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.