2016-05-13 7 views
0

Wie viele Menschen mit log4net Ich habe meine eigene log4netWrapper, die alle die Protokollierung durch verschiedene Projekte zentralisiert, auch einige wiederholten Verweise auf log4net.dll spart in jedem Projekt.Der beste Weg zu log4net-Wrapper für den Zugriff auf App.config

Ich verwende diese Lösung geschrieben here. Zusammen mit this one zu vermeiden, log4net.dll in Projekten zu referenzieren, wo ich meine Wrapper verwenden.

Ich habe es für eine einfache Konsolenanwendung arbeiten, wo ich weiß, wo die App.config befindet und seinen Namen:

FileInfo configFileInfo = new FileInfo("App.config"); 
log4net.Config.XmlConfigurator.ConfigureAndWatch(configFileInfo); 

ich Potenzial sehen Probleme hier:

  1. Jedes Projekt kann habe eine eigene App.config.
  2. Diese Datei kann ihren Namen in {projectname} .config ändern. (? In Release vielleicht)
  3. App.config Datei-Eigenschaften haben Optionen wie Kopieren, eingebettet usw. (aber wo genau, kann es mit anderen App.config durcheinander?)

Kurz gesagt:

Was ist der beste Weg, um den Wrapper App.config auf bequeme Weise zu erreichen, wo immer er verwendet wird?

+0

Haben Sie eine Web-App oder eine ausführbare Datei? Sind das nur eins auf mehrfache? – Agalo

+0

Der Wrapper ist eine Bibliothek für eine Anwendung, keine Web-Technologie ist in Arbeit. Was meinst du mit mehreren? – juagicre

Antwort

0

Sie können den Namen der ausführenden Datei erhalten, die Ihnen den Namen der Konfigurationsdatei gibt. Etwas wie:

Assembly.GetCallingAssembly(); 

oder

Assembly.GetExecutingAssembly(); 
+0

Ist das der beste Weg? Es klingt für mich wie sehr knifflig ... endlich ist es vielleicht besser, alles zusammen zu brechen und die log4net.dll mit einzuschließen. – juagicre

1

Sie erhalten den Konfigurationsdateinamen von AppDomain.CurrentDomain.SetupInformation.ConfigurationFile:

Die Konfigurationsdatei beschreibt die Suchregeln und Konfigurations Daten für die Anwendungsdomäne. Der Host, der die Anwendung erstellt, ist für die Bereitstellung dieser Daten verantwortlich, da die sinnvollen Werte von Situation zu Situation variieren. Die Konfigurationsdaten für ASP.NET-Anwendungen werden beispielsweise für jede Anwendung, jeden Standort und jeden Computer gespeichert. Die Konfigurationsdaten für eine ausführbare Datei werden für jede Anwendung, jeden Benutzer und Computer gespeichert.

Nur der Host kennt die Besonderheiten der Konfigurationsdaten für einen bestimmten Umstand.

+0

Hallo @stuartd Danke für die Antwort. Ist es für ein Bibliotheksprojekt sinnvoll, eine eigene App-Konfiguration zu haben? Wäre sauberer wenn eingebettet? – juagicre

+1

Klingt so, als sollten Sie Ihre log4net-Konfiguration aus der App-Konfiguration in eine eigenständige Datei verschieben. Sie können die log4net-Konfigurationsdatei in das Projekt einbetten und die Überladung von Configure verwenden, die einen Stream verwendet, oder Sie können sie einfach als statische Zeichenfolge speichern. – stuartd

0

Es gibt viele Möglichkeiten, dieses Problem zu lösen, je nach den genauen Anforderungen, in meinem Fall habe ich die log4net-Konfiguration programmatisch wie folgt aus:

var hierarchy = (Hierarchy)log4net.LogManager.GetRepository(); 

var patternLayout = new PatternLayout(); 
patternLayout.ConversionPattern = "%date [%thread] %-5level %logger - %message%newline"; 
patternLayout.ActivateOptions(); 

var console = new ConsoleAppender(); 
console.Layout = patternLayout; 

var roller = new RollingFileAppender(); 
roller.AppendToFile = true; 
roller.File = Path.Combine(Logger.LogPath, "log.txt"); 
roller.Layout = patternLayout; 
roller.MaxSizeRollBackups = 5; 
roller.MaximumFileSize = "100MB"; 
roller.RollingStyle = RollingFileAppender.RollingMode.Size; 
roller.StaticLogFileName = true; 
roller.ActivateOptions(); 

hierarchy.Root.AddAppender(console); 
hierarchy.Root.AddAppender(roller); 

MemoryAppender memory = new MemoryAppender(); 
memory.ActivateOptions(); 
hierarchy.Root.AddAppender(memory); 

hierarchy.Root.Level = Level.Debug; 
hierarchy.Configured = true; 

Ein weiterer Ansatz könnte sein, es einzubetten, wie in einem vorgeschlagen der Kommentare.

Da mein Wrapper eine Bibliothek ist, macht es keinen Sinn, eine spezifische app.config für diese Wrapper-Bibliothek zu erstellen, damit die Konfigurationsoptionen in der endgültigen app.config-Datei eingerichtet werden können, in der der log4net-Wrapper verwendet wird .

Verwandte Themen