instalar ilog application c# log4net

ilog - log4net implementation in c#



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

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

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

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


¿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.


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:

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

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