2009-07-22 9 views
1

Ich möchte wissen, wie man Dateinamen mit Log4net dynamisch zuordnen. Meine Anwendung ist so, dass 10 verschiedene Dateien basierend auf Benutzereingaben dynamisch erstellt werden sollen und später auf der Grundlage des Namens den entsprechenden Dateinamen benötigt Abgerufen werden und Informationen darauf geschrieben werdenlog4 net Dynamischer Dateiname Zuweisung

Zum Beispiel in meiner Anwendung basierend auf meiner Geschäftsanforderung für jede XML-Datei eine entsprechende Protokolldatei mit dem gleichen Namen wie XML-Datei erstellt werden sollte .Later, wenn ich irgendwelche Änderungen an der XML-Datei ein Eintrag muss in der entsprechenden Protokolldatei

Bitte helfen. Ich habe Probleme der Kontrolle über das entsprechende Protokoll zu bekommen, um es zu schreiben

Antwort

3

Habe dies nicht getan, aber es gibt wahrscheinlich eine Reihe von Möglichkeiten, dies zu tun, so kann dies nicht der beste Weg sein, aber es sollte

arbeitet
public OpenLogFile(string fileName) 
{ 
    log4net.Layout.ILayout layout = new log4net.Layout.PatternLayout("%d [%t]%-5p : - %m%n");;   
    log4net.Appender.FileAppender appender = new log4net.Appender.FileAppender(layout , filename); 
    appender.Threshold = log4net.Core.Level.Info; 
    log4net.Config.BasicConfigurator.Configure(appender); 
} 

Dann rufen Sie einfach OpenLogfile, wenn Sie Dateien wechseln müssen.

Möglicherweise müssen Sie das Layout oder den Appendertyp anpassen.

Ein großer Nachteil dieser Methode besteht darin, dass Sie die xml-Konfiguration verlieren und die Einstellungen zur Laufzeit ändern können. So ein besserer Weg könnte sein, Ihre appender in der XML-Datei zu konfigurieren, um eine Eigenschaft verwenden

zB

file type="log4net.Util.PatternString" value="Logfiles\Log_For_%property{MyLogFileName}" 

dann in Ihrem Code können Sie die Eigenschaft ändern

log4net.GlobalContext.Properties["MyLogFileName"] = ...; 

Der schwierige Bit ist um log4net dazu zu bringen, sich neu zu laden. Ich habe die Dokumentation nicht gelesen, also weiß ich nicht, ob es eine Möglichkeit gibt, ein Nachladen zu erzwingen. Es könnte funktionieren, wenn Sie log4net.Config.XmlConfigurator.ConfigureAndWatch erneut aufrufen. Andernfalls sollte es funktionieren, wenn Sie die XML-Datei öffneten und erneut speicherten (ohne etwas ändern zu müssen)

Hoffen, dass dies hilft.

+0

Dank für das Zeigen: log4net.GlobalContext.Properties ["MyLogFileName"] = ...; –