2010-01-07 19 views
23

Uygulamamda, türüne göre kendi logger'larını yaratan her türüyle log4net kullanıyorum - ör. : My kodundan tüm günlük çıkışını yakalamak amacıylaLog4net yapılandırmasında logger isimlerini joker olarak kullanmak mümkün mü?

private static readonly ILog Log = LogManager.GetLogger(typeof(Program)); 

ben geliştiriyorum gibi, ben DEBUG kök logger bırakın.

Ancak, üçüncü taraf bileşenleri de aynı yaklaşımı kullanır, ancak günlük iletileri İlgilendiğim hangi bir ikinci, hiçbiri 100'ler oluşturuyor.

kaydedici içinde joker karakter çeşit kullanmak mümkün mü Tüm kaydedicilerini sadece WARN'de oturum açmak için zorlamak için :

<logger name="com.thirdparty.*"> 
    <level value="WARN"/> 
    </logger> 

Eğer sorduğun buysa tersini yapamaz

cevap

34

.

<root> 
    <level value="FATAL" /> 
    <appender-ref ref="RollingFile" /> 
    </root> 

    <logger name="MyCompany.Web" > 
    <level value="WARN" /> 
    <appender-ref ref="WebErrors" /> 
    </logger> 

    <!-- Will log all FATALs from NHibernate, including NHibernate.SQL and all the nested --> 
    <logger name="NHibernate" > 
    <level value="FATAL" /> 
    </logger> 

Ayrıca ben kılavuzu okumak için öneriyoruz: Burada

Sık sık kullanmak örnektir. Çok fazla açıklama sağlıyor. Örneğin, Logger Hierarchy hakkında okuyabilirsiniz. Bir logger ardından Adından bir nokta soyundan logger adının öneki ise başka logger atalarından olduğu söylenir

: Burada oradan alıntı. Bir logger kendi aralarında ve soyunan kaydedici arasında hiçbir atalar yoksa, bir çocuk kaydedicinin ebeveyni olduğu söylenir. Hiyerarşi, , .NET'teki ad alanı ve sınıf hiyerarşisi ile aynı şekilde çok çalışır.

ve ayrıca:

Seviye Kalıtım: belirli bir kayıt cihazı X kalıtsal düzeyi, X başlayan, kayıt cihazı hiyerarşi ilk boş olmayan bir seviyeye eşit olan ve Kök kaydediciye doğru hiyerarşisinde yukarı doğru ilerliyor.

+0

@Dmitriy - Haklısınız. Bunu hiç bilmiyordum! Şimdi sorduğum için neredeyse aptal hissediyorum :). Cevap için teşekkürler. –

+0

Vay, ya ben de. Bu harika bir bilgi. –

+0

BTW, tüm bunlar log4net web sitesinde iyi belgelenmiştir. Bağlantıyı cevaba ekledim. –

4

[tam örnek yukarıda, a * kullanarak çalışmaz]. Demek istediğim, varsayılan günlük seviyesini uyarısı'a ayarladıktan sonra DEBUG olarak tanımladığınız özel kaydedicileri ayarlayın.

Ayrıca, ekleyicinizin eşiğini DEBUG olarak ayarlayabilir ve diğer ekleyicinin de WARN ayarını yapmasını sağlayabilirsiniz. Örneğin

: o (iç içe dahil) ad alanı içindeki tüm iletiler için geçerli olacaktır böylece sadece bir ad alanının bir kısmını belirtebilirsiniz

<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender"> 
    <applicationName value="Application" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
    </layout> 
    <threshold value="WARN" /> 
</appender> 

<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender,log4net"> 
    <to value="[email protected]" /> 
    <from value="[email protected]" /> 
    <subject value="Notification" /> 
    <smtpHost value="server01" /> 
    <bufferSize value="1" /> 
    <lossy value="false" /> 
    <layout type="log4net.Layout.PatternLayout,log4net"> 
     <conversionPattern value="%property{log4net:HostName} :: %level :: %message %newlineLogger: %logger%newlineThread: %thread%newlineDate: %date%newlineNDC: %property{NDC}%newline%newline" /> 
    </layout> 
    <threshold value="DEBUG" /> 
</appender> 
+0

@Brian - Cevabınız için teşekkür ederiz. Evet - ben * yapabilirdim * ama sorun şu ki çok çeşit var. Günlüğe kaydetme için beyaz liste yaklaşımını kullanmak, günlüğe kaydetme yapılandırmamı büyük ve hantal hale getirecek, bu yüzden kara liste yaklaşımını merak ettim. –

+0

Anlaşıldı. Tanımladığınız diğer kaydedicilere bağlı olarak olası bir yaklaşım uyguluyordum. Eklenti düzeyinde bir eşik tanımlamayı önermek için cevabımı güncelledim. Ardından, ekleyiniz hala DEBUG olarak ayarlanmışken, ek eşleştirmeyi uygun eşiğe sahip olacak şekilde 3. taraf kitaplığını değiştirin. –

+0

@Brian - her durumda öneriniz için teşekkürler - sadece birkaç kaydediciniz varsa iyi bir yaklaşımdır. Önerinizin ikinci kısmına gelince - benim durumumda her ikisinin de aynı hedefe gitmesini istiyorum (tek bir günlük dosyası veya konsol penceresi). Bu yaklaşım hala orada çalışır mı? –

İlgili konular