40 votes

Comment utiliser une propriété GlobalContext dans un nom d'appender log4net?

J'essaie de personnaliser un chemin de fichier log4net pour utiliser une propriété que j'ai définie dans le dictionnaire log4net.GlobalContext.Properties .

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

Je peux voir que cette valeur est correctement définie 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?

57voto

Dscoduc Points 4066

J'ai rencontré le même comportement et je l'ai résolu en définissant la variable globale avant d'appeler 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 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...

1voto

Dillie-O Points 16780

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X