Best practices für die Erstellung eines logger-Bibliothek, die mit log4net. Ist
Mein Ziel ist, erstellen Sie eine log4net-Bibliothek, die geteilt werden können, die über mehrere Projekte.
In meiner Lösung, die in .net 4.0 habe ich eine Klasse Bibliothek mit dem Namen Logger und verwiesen wird, die von web-Projekt.
Nun erstellte ich einen logger.config in der Bibliothek-Klasse und setzen Sie die gesamte Konfiguration im logger.config-Datei. Ich habe dann
[assembly: log4net.Config.XmlConfigurator(Watch = true, ConfigFile = "Logger.config")]
Wenn ich die web app nicht angemeldet. Also fügte ich diese Zeile von code in web.config
<add key="log4net.Internal.Debug" value="true"/>
gab mir debugging-Informationen und Fehler-Informationen
Konnte nicht finden, Konfiguration, Abschnitt "log4net" in der Anwendung .config-Datei. Überprüfen Sie Ihre .config-Datei für den und-Elementen. Die Konfiguration sollte der Abschnitt wie folgt Aussehen:
Zog ich die Konfiguration von logger.config in web.config und alles scheint gut zu funktionieren.
Ich nicht wollen, dass der log4net Konfiguration in web.config, aber haben es logger.config als ein sauberer Ansatz. Ziel ist es, für andere Projekte, die diese Bibliothek verwenden und sich keine Gedanken über Konfiguration, bei jedem Projekt.
Die Frage ist jetzt, Wie mache ich das? Was mache ich falsch? Jeder Vorschlag mit code-Beispiel von Vorteil sein wird für alle.
FYI, ich bin mit Struktur anzeigen IOC reslove der logger vor der Anmeldung zu.
- Ich würde vorschlagen, nicht die Erstellung eines logger-Bibliothek - nutzen Sie einfach log4net direkt. Vielleicht schaffen Sie noch ein paar Erweiterung Methoden auf die
ILog
wenn Sie wirklich brauchen, um. - haben Sie versucht, die fallen der logger.config-Datei in Ihr "bin" - Ordner?
- Ich vermute, dass Sie noch nicht konfiguriert die config-Datei auf "Immer Kopieren" oder "Kopieren, wenn neuer" auf zu bauen. Diese Arten von Dateien sind in der Regel auf "Nicht Kopieren".
- Wo ist dein logger.config-Datei befindet? In der Logger-Klasse Bibliothek oder in das Projekt, in dem es verwendet? Auch, wie Sie die Lösung der logger von Ihrem IOC?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, Sie versuchen das Rad neu zu erfinden, es gibt mehrere Werkzeuge, um Abstrakt die Holzfäller aus dem code Entkopplung der logger-framework aus dem code:
http://slf.codeplex.com/
http://netcommon.sourceforge.net/
Diejenigen sind, die am häufigsten in .Net-Anwendungen.
Nun, wenn Sie darauf bestehen, sich mit Ihrer eigenen Abstraktion (der gültig ist), dies ist mein Vorschlag:
Zunächst, ich gehe davon aus, dass Sie hätte so etwas wie:
Ok, also in Ihrem code, den Sie Spritzen, ein singleton-Referenz von Ihrem logger, wie:
Nun, ich bevorzuge normalerweise "Konvention vor Konfiguration", aber im Fall von Holzfällern, die Konfiguration über eine Konfigurationsdatei ist ein großer Vorteil, denn wenn dein code in Produktion ist, werden Sie wollen, manchmal ändern Sie die Protokollierung Regeln aktivieren oder deaktivieren Logger, ändern Sie den Protokoll-Ebene, und aktivieren/deaktivieren namens Logger.
Die einfachste und wiederverwendbare Möglichkeit, die ich gefunden habe, um dies zu erreichen ist, indem man die Konfiguration in einer externen Datei, wie Sie kommentiert, dann muss ich mir nicht die Mühe aufrufen der
XmlConfigurator
im code, weil es einfacher ist für mich nur noch ein paar Programm-Einstellungen zu meiner config-Datei wie folgtDas ist es. Diese Anwendungseinstellungen überschreiben Ihre log4net Konfiguration und Sie sind leicht zu pflegen. Ihre config-Datei wie folgt Aussehen:
Konfigurieren mehr appenders: klicken Sie hier
In Ihre Projekte brauchen Sie nur einen Verweis auf die logger-abstraction-Komponente, und nur in der web-Projekt - (oder windows-Anwendung, es ist die gleiche) fügen Sie die log4net-config-Datei-und nur diese Anwendung Einstellungen
Da Sie die Erstellung einer wiederverwendbaren Komponente würde ich empfehlen den Aufbau einer internen Nuget-server in Ihrer Organisation (es ist nur eine IIS-Anwendung) und für die Bereitstellung Ihrer Komponenten, in diesem Fall die Bibliothek mit dem logger. Es wäre auch besser, wenn Ihr eine andere Nuget-Paket enthält nur die Einstellungen der Anwendung und der log4net Konfiguration-Datei, so können Sie dieses Nuget-Paket nur in Ihrem web-Projekt
Vielleicht für Ihre web-Anwendung, können Sie versuchen, laden Sie die Konfigurationsdatei in Ihrem application_start (gloabal.asax.cs)
Möchten Sie vielleicht versuchen, diese : http://forums.asp.net/t/1739162.aspx/1 oder diese ein.
Die web-Anwendung Aussehen wird, nur um es in den main webconfig und configs von Bereiche/Ordner, wenn Sie standardmäßig.
Sie sollten sicherstellen, dass Sie alle erforderlichen Konfigurationen wie unten im Sie die neue
appConfig
fürlog4net
:p.s. überprüfen Sie diese Antwort zu : Können eine web.config Lesen aus einer externen xml-Datei?
Stellen Sie sicher, dass Sie die Bereitstellung der config-Datei zu, wenn die web.config nicht enthalten ist.