C'est une question vraiment courante, mais je n'ai pas pu obtenir de réponse au travail. Voici mon fichier de configuration:
<?xml version="1.0" encoding="utf-8"?>
<log4net>
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
<file value="CraneUserInterface.log" />
<appendToFile value="true" />
<maxSizeRollBackups value="90" />
<rollingStyle value="Size" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date - %message%newline" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="RollingFile" />
</root>
Mais je dois déterminer le nom réel du fichier de consignation au moment de l'exécution. J'ai trouvé un bel exemple ici , mais lorsque j'essaie de parcourir la collection retournée par l'appel à GetIterators (), je trouve que cette collection est vide.
Je dois changer le nom "CraneUserInterface.log" en "CraneUserInterface_1.log", ou 2 ou 3, selon quelque chose que le programme lit au moment de l'exécution. Comment puis je faire ça?
Voici ma première passe à utiliser le code présenté dans cet exemple:
static bool ChangeLogFileName(string AppenderName, string NewFilename)
{
// log4net.Repository.ILoggerRepository RootRep;
// RootRep = log4net.LogManager.GetRepository();
log4net.Repository.ILoggerRepository RootRep = m_logger.Logger.Repository;
foreach (log4net.Appender.IAppender iApp in RootRep.GetAppenders())
{
string appenderName = iApp.Name;
if (iApp.Name.CompareTo(AppenderName) == 0
&& iApp is log4net.Appender.FileAppender)
{
log4net.Appender.FileAppender fApp = (log4net.Appender.FileAppender)iApp;
fApp.File = NewFilename;
fApp.ActivateOptions();
return true; // Appender found and name changed to NewFilename
}
}
return false; // appender not found
}
Merci beaucoup!
Qu'en est-il de l'utilisation de "% property" pour définir une "balise" dynamique au nom du fichier (au moment de l'exécution)?
<file type="log4net.Util.PatternString" value="~/App_Data/%property{LogName}" />
Expliqué ici: Meilleur moyen de définir dynamiquement un chemin de fichier appender
vous pouvez utiliser cette fonction: dans cette fonction, obtenez d'abord l'emplacement du fichier que vous avez défini dans webconfig et après cela, vous pouvez ajouter le chemin que vous souhaitez! comme Date! notre client ! ou .....
WebConfig:
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="C:\\t4\\"/>
<appendToFile value="true"/>
<rollingStyle value="Composite"/>
<datePattern value="_yyyy-MM-dd.lo'g'"/>
<maxSizeRollBackups value="10"/>
<maximumFileSize value="1MB"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date User:%identity IP:%X{addr} Browser: %X{browser} Url: %X{url} [%thread] %-5level %c:%m%n"/>
</layout>
</appender>
Fonction:
public static void ChangeFileLocation(string _CustomerName,string _Project)
{
XmlConfigurator.Configure();
log4net.Repository.Hierarchy.Hierarchy h =(log4net.Repository.Hierarchy.Hierarchy)LogManager.GetRepository();
foreach (IAppender a in h.Root.Appenders)
{
if (a is FileAppender)
{
FileAppender fa = (FileAppender)a;
string sNowDate= DateTime.Now.ToLongDateString();
// Programmatically set this to the desired location here
string FileLocationinWebConfig = fa.File;
string logFileLocation = FileLocationinWebConfig + _Project + "\\" + _CustomerName + "\\" + sNowDate + ".log";
fa.File = logFileLocation;
fa.ActivateOptions();
break;
}
}
}
et résultat comme ceci: C:\t4\TestProject\Customer1\samedi 31 août 2013.log