2011-03-01 23 views
31

ben belirli günlük ifadeleri için başka logger eklemek için gerekli olarak çalışan fakat var Log4Net 2.0 kullanıyorum belirli bölümleri için kullanılan bir 2 logger nasıl eklenir. Tüm kayıtlar tek bir dosya ekleyicisine yapılır. Ben yapmak istiyorum değişiklik 3. parti uygulama debug/hata bilgilerini içeren olaylar, bu bilgileri yakalamak ve faydalı iken ben normal uygulama günlük dosyası kirletiyor hissetmek ve bunun yerine bu kendi günlüğünde depolanacak tercih ateşler olmasıdır dosya. Ben istiyorumLog4Net - sadece kod

Sonuçta 3. parti günlük hariç uygulamadan tüm günlüğü ile log-file.txt adlı bir dosyadır. Ve sadece 3. taraf uygulamadan giriş yaparak log-file-3rdparty.txt adında ikinci bir dosya. Sahip olduğum problem, Log4Net'i 2 ayrı logger'a sahip olacak şekilde kurmak. Ben zaten bir 2. LogFileAppender yaratmayı denedim ve bunu root'a ekledim, ancak tüm bunlar aynı loglama ifadelerini her iki kaydediciye koyar. aşağıdaki gibi bir uygulama karşısında

şu anda GetLogger deyimi var. Bu ideal olarak aynı kalmalıdır, bu yüzden mevcut kayıtlar değişmez. Bu ifadeden etkilenmeyen yeni bir günlükçüye ihtiyacım var, ancak bunun yerine yalnızca 3. taraf kaydı için örneklendirildi.

private readonly ILog _log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

Ve App.Config

izler.

< log4net> 
<logger name="MyApp.Logging"> 
    <level value="DEBUG"/> 
</logger> 

<root> 
    <level value="ALL" /> 
    <appender-ref ref="LogFileAppender" /> 
</root> 

<appender name="LogFileAppender" type="log4net.Appender.FileAppender" > 
    <param name="File" value="log-file.txt" /> 
    <param name="AppendToFile" value="true" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <param name="Header" value="&#13;&#10;[Application started]&#13;&#10;" /> 
    <param name="Footer" value="[Application Finished]&#13;&#10;"/> 
    <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> 
    </layout> 
</appender> 
</ log4net> 

Yardımcı olabilir misiniz? o fark edecekse

DÜZENLEME

. Üçüncü taraf kayıt olayları, bazı uygulama günlük olaylarımın da tetiklendiği aynı sınıfta ele geçirilir; bunun nedeni, sınıfın üçüncü taraf yazılımını kontrol etmekten sorumlu olmasıdır. Bu bir sorun mu? Log4net'in hangi loggerın sınıf isimlerine göre oluşturduğunu ayırt edebileceğine dair bazı işaretlerim var, ve eğer durum buysa 3.sınıf kendi sınıfına giriş yapmak zorunda kalıyor mu?

cevap

75

Kolayca böyle özel bir logger oluşturabilirsiniz:

ILog specialLogger = LogManager.GetLogger("SpecialLogger"); 
Daha sonra, bu kaydedici için özel appender kullanmak için sistemi yapılandırabilirsiniz

:

<logger name="SpecialLogger" additivity="false"> 
    <level value="ALL" /> 
    <appender-ref ref="SpecialLogFileAppender" /> 
</logger> 
<root> 
    <level value="ALL" /> 
    <appender-ref ref="LogFileAppender" /> 
</root> 
+1

ben 'toplanırlığını eksikti =" logger yapılandırmasında false "' özelliği. bu bulmak için 30 dakika Googling Been - ayağa oy kullandı. –