J'essaie de personnaliser un chemin de fichier log4net pour utiliser une propriété que j'ai définie dans le log4net.GlobalContext.Properties
dictionnaire.
log4net.GlobalContext.Properties["LogPathModifier"] = "SomeValue";
Je peux voir que cette valeur est définie correctement lors du débogage. puis dans ma configuration
<file type="log4net.Util.PatternString"
value="Logs\%appdomain_%property{LogPathModifier}.log" />
Cependant, la sortie de ceci me donne "_ (null) .log" à la fin du chemin. Ce qui donne?
J'ai rencontré le même comportement et l'ai résolu en définissant la variable globale avant d'appeler le XmlConfigurator ... Voici ce que j'utilise avec succès:
détails de log4net.config:
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender,log4net">
<File type="log4net.Util.PatternString" value="App_Data/%property{LogName}" />
...
</appender>
Détails 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");
}
J'espère que cela t'aides...
Ajouter un type = log4net.Util.PatternString
dans l'élément File
Le problème (je pense) est que vous OBTENEZ (GetLogger) l'enregistreur avant de définir le nom et de charger la configuration ...
Essayez de déclarer l'enregistreur comme: private static log4net.ILog _pLog
puis dans Application_Start:
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");
}
La séquence est donc:
// Set logfile name and application name variables
// Load log4net configuration
// get the logger
// Record application startup
L'enregistreur a-t-il été initialisé via la méthode globale ou principale de l'application? Il se peut que le GlobalContext n'ait pas encore été initialisé.