2009-02-18 7 views
38

log4net.GlobalContext.Properties sözlüğünde ayarladığım bir özelliği kullanmak için bir log4net dosya yolunu özelleştirmeye çalışıyorum.Bir GlobalContext özelliğini log4net ekleyici adında nasıl kullanırım?

log4net.GlobalContext.Properties["LogPathModifier"] = "SomeValue"; 

Bu değerin, hata ayıklama sırasında doğru şekilde ayarlandığını görebiliyorum. ve sonra benim yapılandırmasında

<file type="log4net.Util.PatternString" 
     value="Logs\%appdomain_%property{LogPathModifier}.log" /> 

Ancak bu çıkış yolunun sonunda "_ (boş) .log" bana verir. Ne verir?

cevap

54

Aynı davranışı koştu ve XmlConfigurator çağırmadan önce küresel değişkeni ayarlayarak bunu çözüldü ... İşte başarıyla kullanıyorum budur .asax ayrıntıları: Bu yardımcı olur

private static readonly log4net.ILog log = log4net.LogManager.GetLogger("Global.asax"); 
void Application_Start(object sender, EventArgs e) 
{ 
    // Set logfile name and application name variables 
    log4net.GlobalContext.Properties["LogName"] = GetType().Assembly.GetName().Name + ".log"; 
    log4net.GlobalContext.Properties["ApplicationName"] = GetType().Assembly.GetName().Name; 

    // Load log4net configuration 
    System.IO.FileInfo logfile = new System.IO.FileInfo(Server.MapPath("log4net.config")); 
    log4net.Config.XmlConfigurator.ConfigureAndWatch(logfile); 

    // Record application startup 
    log.Debug("Application startup"); 
} 

Umut ...

+0

Tam olarak aynı problemi yaşıyordum, benim durumumda aynı dosyaya 2 farklı süreçten giriş yapmaya çalışıyordum. 2 ayrı dosyaya giriyordu, ancak ikinci uygulamada XmlConfigurator çağırmadan önce global değişkeni ayarlamak sorunu çözdü. Çok teşekkür ederim. +1 –

+1

Kullanılan 'System.Reflection.Assembly.GetExecutingAssembly(). GetName(). Name 'uygulama adı için –

+0

@ Dscoduc Hangi sınıf Server.MapPath içerir lütfen ayrıntıları paylaşabilirsiniz – Venkat

1

Logger, uygulamadaki genel veya ana yöntemle başlatıldı mı? GlobalContext henüz başlatılmamış olabilir.

log4net.config ayrıntıları:

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender,log4net"> 
    <File type="log4net.Util.PatternString" value="App_Data/%property{LogName}" /> 
    ... 
</appender> 

Küresel

+0

() özelliği ayarlamadan önce. Ayrıca, günlük kaydı doğru şekilde çalışıyor, sadece dosya adı özel değeri almıyor. –

13

Dosya öğesine type = log4net.Util.PatternString ekle

4

sorunu (Bence) adını ayarlamak ve yapılandırma yük önce ... gibi logger bildirmek yapmak

deneyin (GetLogger) logger GET olduğunu : Application_Start içinde private static log4net.ILog _pLog ve sonra yapın:

void Application_Start(object sender, EventArgs e) 
{ 
    // Set logfile name and application name variables 
    log4net.GlobalContext.Properties["LogName"] = GetType().Assembly.GetName().Name + ".log"; 
    log4net.GlobalContext.Properties["ApplicationName"] = GetType().Assembly.GetName().Name; 

    // Load log4net configuration 
    System.IO.FileInfo logfile = new System.IO.FileInfo(Server.MapPath("log4net.config")); 
    log4net.Config.XmlConfigurator.ConfigureAndWatch(logfile); 

    //Get the loger 
    _pLog = log4net.LogManager.GetLogger("Global.asax"); 

    // Record application startup 
    pLog .Debug("Application startup"); 
} 

Yani dizisidir: Ben LogManager.GetLogger çağrıda

// Set logfile name and application name variables 
// Load log4net configuration 
// get the logger 
// Record application startup