2016-07-31 16 views
8

Ich versuche, eine Enterprise Library 6 LogWriter Ausnahme zu behandeln, die von Enterprise Library nach dem Upgrade 4 bis 6Wie überprüft man, ob LogWriter eingestellt wurde?

ich entweder bekommen vor kurzem immer wieder auftauchte:

Die LogWriter nicht gesetzt worden ist für den Logger statische Klasse. Setzen Sie es auf , indem Sie die Logger.SetLogWriter-Methode aufrufen.

ODER

Die LogWriter bereits gesetzt ist.

... je nach Szenario.

Das Problem ist, dass es ein InvalidOperationException wirft, die zu allgemein zu handhaben scheint, und dass auch

if (Logger.Writer == null) 

mit Kontrolle ... auch eine Ausnahme ergibt, so wie würde man dann prüfen, ob der Schriftsteller eingestellt oder nicht?

+0

Klingt wie Sie angeblich sind sicherzustellen, dass es genau einmal gesetzt ist, statt die Eigenschaft zu testen. Warum funktioniert das nicht? – usr

+0

[this] (https://entlib.codeplex.com/discussions/442089) scheint Ihr Problem zu lösen – lokusking

Antwort

1

Vielen Dank für die Antworten und Kommentare.

Ich habe den Code des Projekts durchgesehen und gesehen, dass nichts darin eingebaut ist, das dies unterstützt.

Obwohl das Projekt nicht mehr in der Entwicklung ist, habe ich eine Chance genutzt und eine feature request gepostet.

Bestes Szenario diese Anforderung zu erreichen wäre es das Herunterladen und das Hinzufügen von Logik, tut eine Überprüfung und zusätzlich die Festlegung bestimmter Ausnahmen (siehe Feature-Request) werden Forking:

LogWriterNotSetException und LogWriterAlreadySetException

EDIT

Struck-out-Forking, da dies lizenzrechtliche Auswirkungen haben würde. Das Eigentumsrecht wurde nicht für den Protokollierungsanwendungsblock übertragen. Only Unity and Prism have been transferred.

Nach einem comment on the notice about the future of Unity von einem P & P Mitglied:

Für das Logging Application Block, halten wir es von Semantic Logging (vormals Semantic Logging Application Block oder SLAB) abgelöst werden.

https://github.com/mspnp/semantic-logging

Mit anderen Worten, wir haben nicht die Absicht auf die Protokollierung Anwendung -Block zu arbeiten und wir haben keinen Plan, um es an neue Eigentümer zu übertragen.

So beste Wette für jedermann auf etwas arbeiten neu versucht, aus Semantic Logging

2

Nach this CodePlex discussion,

Das boostrapping Verhalten von Enterprise Library in Version 6. Die Auswirkungen für die statische Logger Fassade geändert hat, ist, dass Sie die interne LogWriter (zB bei Programmstart) festlegen müssen

Wenn Sie in einem Web-Anwendung Szenario sind, dann ist Application_Start() die gute Art und Weise, dies zu tun:

protected void Application_Start() 
{ 
    Logger.SetLogWriter(new LogWriterFactory().Create()); 
} 

Ansonsten richten Sie die Dinge in Main() Methode (oder irgendwo darum - sagen, während der Container-Initialisierung).

+0

Dies ist der Weg zu gehen. Wenn Sie es hier einmal einstellen, sollte es keine Frage sein, ob es eingestellt wurde oder nicht. – Sinaesthetic

+0

Danke für die Antwort, aber es beantwortet immer noch nicht die Frage. – user919426

Verwandte Themen