Konfigurieren von log4net-Appendern über die XML-Datei * und * code

Ich habe heute angefangen mit log4net zu spielen und bis jetzt gefällt es mir sehr gut. Um unsere aktuelle Protokollierungsfunktion beizubehalten, muss die App bei jedem Start der Anwendung eine neue Protokolldatei erstellen. Der Name der Protokolldatei enthält den Datums- und Zeitstempel. Derzeit habe ich log4net über ein @ konfigurieXmlConfigurator, das funktioniert super, außer dass der Dateiname für meinRollingFileAppender ist in der XML-Konfigurationsdatei fest codiert.

Ich möchte das @ weiterhin benutzXmlConfigurator, aber nach dem Aufruf vonConfigure(), Ich möchte am @ bekommRollingFileAppender und ändern Sie im Code den Wert der Datei in eine dynamisch generierte Zeichenfolge. Die Probedocumentation online scheint gerade nicht verfügbar zu sein, aber ich habe die SDK-Referenz durchgesehen und es sieht so aus, als könnte ich das @ verwendeHeirarchy undGetAppenders() zu tun, was ich tun muss. Bin ich auf dem richtigen Weg?

Ok, ich habe einen Stich gemacht und den folgenden Code ausprobiert, der nicht funktioniert hat:

private static readonly ILog _log = LogManager.GetLogger(typeof(GUI));
// in the config file, I've set the filename to example.log, and it works
XmlConfigurator.Configure(new FileInfo("log_config.xml"));
Hierarchy hierarchy = LogManager.GetRepository() as Hierarchy;
if(hierarchy != null) {
    // get the appenders
    IAppender[] appenders = hierarchy.GetAppenders();
    // change the filename for the RollingFileAppender
    foreach( IAppender a in appenders) {
        RollingFileAppender rfa = a as RollingFileAppender;
        if(rfa == null)
            continue;
        rfa.File = "newfile.log"; // no runtime error, but doesn't work.
    }
}
_log.Info("Application started");

Antworten auf die Frage(4)

Ihre Antwort auf die Frage