La meilleure façon de définir dynamiquement un appender chemin d'accès au fichier
Je suis en train d'essayer de trouver quelqu'un de plus malin que moi afin de valider certains de la syntaxe que j'ai écrit jusqu'. L'idée est de configurer le nom de fichier de mon RollingFileAppender au nom de l'assemblée, afin de le rendre plus ré-utilisable pour mes projets.
J'ai vu cette précédente, SI bien que l'article mais ce n'était pas exactement en mesure de répondre à ma question...
J'ai eu un dickens de temps à essayer de comprendre les composantes internes de Log4net et c'est ce que j'ai trouvé (résidant dans le monde.asax fichier - méthode Application_Start):
//Bind to the root hierarchy of log4net
log4net.Repository.Hierarchy.Hierarchy root =
log4net.LogManager.GetRepository()
as log4net.Repository.Hierarchy.Hierarchy;
if (root != null)
{
//Bind to the RollingFileAppender
log4net.Appender.RollingFileAppender rfa =
(log4net.Appender.RollingFileAppender)root.Root.GetAppender("RollingLogFileAppender");
if (rfa != null)
{
//Set the file name based on the assembly name
string filePath =
string.Format("~/App_Data/{0}.log", GetType().Assembly.GetName().Name);
//Assign the value to the appender
rfa.File = Server.MapPath(filePath);
//Apply changes to the appender
rfa.ActivateOptions();
}
}
Quelqu'un peut me dire, "c'est horrible", ou "cela devrait fonctionner très bien"? Aussi, si j'ai mis le fichier dynamiquement puis-je encore attendre la log4net comportement pour faire pivoter les fichiers basé sur le log4net.fichier de configuration des paramètres?
Beaucoup apprécié!
Vous devez vous connecter pour publier un commentaire.
Vous faites cela à la dure! Définir votre log4net config XML dans votre application, le fichier de configuration et l'utilisation
%property{}
pour avantage:C'est dynamique -- vous avez juste à définir la log4net propriété "
LogName
" avant de l'initialisation de log4net. Ainsi, dans votre code à tout moment avant de configurer log4net, régler la valeur souhaitée de cette propriété:Bien sûr, vous pouvez utiliser un autre nom de la propriété. J'ai choisi "LogName" pour un exemple simple, mais vous pouvez avoir un par application si vous le souhaitez, aussi longtemps que votre code sait ce que le bon nom de la propriété est et ce que la valeur correcte doit être.
ToString()
méthode renvoie la valeur dynamique vous le souhaitez.GlobalContext.Properties["User.Identity.Name"] = new DeferredUsernameProvider(); public class DeferredUsernameProvider { public override ToString() { if (HttpContext.Current != null && HttpContext.Current.User != null && HttpContext.Current.User.Identity.Name != null) { return HttpContext.Current.User.Identity.Name; } return "anonymous"; } }
log4net.Config.XmlConfigurator.ConfigureAndWatch("log4net.config.xml")
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config")]
j'ai vu cette page avant que j'ai vu avait déjà posté cette geekswithblogs.net/Lance/archive/2010/08/13/...Ici est la façon de définir ou de modifier le fichier de log de la première appender au moment de l'exécution:
En 2015, on fait comme ceci:
Aucun autre code n'est requis.
Domaine d'application est l'agence d'exécution de l'assemblée de nom de fichier.
il a travaillé pour moi avec la date
<file type="log4net.Util.PatternString" value="./Log/logQueueService%date{yyyy_MM_dd}.log" />