¿Cómo uso una propiedad GlobalContext en un nombre de apéndice Log4net?

Estoy intentando personalizar una ruta del archivo log4net para usar una propiedad que he establecido en el diccionario log4net.GlobalContext.Properties .

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

Puedo ver que este valor está configurado correctamente al depurarlo. y luego en mi configuración

  

Sin embargo, el resultado de esto me da “_ (nulo) .log” al final de la ruta. ¿Lo que da?

Encontré el mismo comportamiento y lo resolví estableciendo la variable global antes de llamar al XmlConfigurator … Esto es lo que estoy usando con éxito:

detalles de log4net.config:

   ...  

Detalles de Global.asax:

 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"); } 

Espero que esto ayude…

Agregue type = log4net.Util.PatternString al elemento File

El problema (creo) es que OBTIENE (GetLogger) el registrador antes de establecer el nombre y cargar la configuración …

Intenta declarar el registrador como: private static log4net.ILog _pLog y luego en Application_Start do:

 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"); } 

Entonces la secuencia es:

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

¿Se ha inicializado el registrador a través del método global o principal en la aplicación? Podría ser que GlobalContext aún no se haya inicializado.