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
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!"
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.
Habe gute Erfahrungen hiermit gemacht: http://nlog-project.org/
Einfach und unkompliziert, zumindest im Gegensatz zu den Microsoft Application Block für Logging...
NLog kann ich auch nur weiterempfehlen. Einfach zu handhaben und komplett per .config Datei steuerbar.
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