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