Laden...

Komplettes überlagern einer Klasse

Erstellt von Gurrnder vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.409 Views
G
Gurrnder Themenstarter:in
142 Beiträge seit 2007
vor 11 Jahren
Komplettes überlagern einer Klasse

Hallo Zusammen

In einer Applikation wird eine Logger Klasse verwendet welche Logs mit dem Namen foo.txt abspeichert. Ich möchte dieses Verhalten verändern, damit die Logs neu foo.log heissen.

Die Klasse Logger ist in einer DLL auf die ich keinen Einfluss habe (allerdings kenne ich den Code) und der Zugriff erfolgt über Statische Methoden. Ich bin mir fast sicher, dass was ich Versuche nicht geht, doch möchte ich dennoch kurz nachfragen.

Ziel ist es, diese klasse so zu Überschreiben, dass an jeder stelle im Code wo Logger.Log() bisher aufgerufen wird dann die neue Klasse benutzt wird und nach foo.log geloggt wird.

Ist das Möglich? Mit welchem Ansatz?
Besten dank für eure Hilfe.

Lg, Gurrnder

6.911 Beiträge seit 2009
vor 11 Jahren

Hallo Gurrnder,

kannst du nicht einfach den Dateinamen (per Konfiguration des Loggers, o.ä.) ändern? Wenn das nicht geht verwende einen guten Logger 😉.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

F
10.010 Beiträge seit 2004
vor 11 Jahren

Da sieht man wozu DI/IOC gut gewesen wäre.
Hätte der Entwickler das beim Design beachtet, wäre es ein ändern der Konfiguration des Containers.

225 Beiträge seit 2005
vor 11 Jahren

Habe gute Erfahrungen hiermit gemacht: http://nlog-project.org/
Einfach und unkompliziert, zumindest im Gegensatz zu den Microsoft Application Block für Logging...

W
113 Beiträge seit 2006
vor 11 Jahren

NLog kann ich auch nur weiterempfehlen. Einfach zu handhaben und komplett per .config Datei steuerbar.

49.485 Beiträge seit 2005
vor 11 Jahren

Hallo Gurrnder,

zur eigentlichen Frage: Mit den entsprechenden AOP-Tools lässt sich der (IL-)Code einer Assembly nachträglich verändern. Damit sollte sich auch der Dateiname in der bestehenden DLL austauschen lassen.

Was das Ersetzen der Aufrufe von Logger.Log() angeht, so stehen diese doch wohl in deinem Quellcode, so dass ein einfaches globales Suchen und Ersetzen über deine Quelldateien auf einfachste Weise zum gewünschten Ergebnis führen würde.

herbivore