Es ist eigentlich ziemlich einfach zu erreichen, folgen Sie einfach diesen Schritten:
Legen Sie die Enterprise Library-Konfiguration in einer separaten Datei
<configuration>
<configSections>
<section name="enterpriseLibrary.ConfigurationSource" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ConfigurationSourceSection, Microsoft.Practices.EnterpriseLibrary.Common, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</configSections>
<enterpriseLibrary.ConfigurationSource selectedSource="EntLib Config">
<sources>
<add name="EntLig Config" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
filePath="EntLib.config" />
</sources>
</enterpriseLibrary.ConfigurationSource>
</configuration>
eine Logging-Filter hinzufügen. Sie können Protokolleintragsprioritäten oder -kategorien verwenden, um die Protokolleinträge zu filtern. Daher sollten Sie in Ihrem Code die Priorität oder Kategorie entsprechend festlegen. Zum Beispiel möchten Sie sehr wichtige Nachrichten und niedriger Priorität Nummer geben, wie 1, und ausführlichere Nachricht 10.
<configuration>
...
<loggingConfiguration name="Logging Application Block" tracingEnabled="true"
defaultCategory="General" logWarningsWhenNoCategoriesMatch="true">
...
<logFilters>
<add minimumPriority="1" maximumPriority="10" type="Microsoft.Practices.EnterpriseLibrary.Logging.Filters.PriorityFilter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
name="Priority Filter" />
...
</loggingConfiguration>
</configuration>
Alle Änderungen an Enterprise Library Konfiguration zur Laufzeit ignoriert werden könnte - außer Änderungen an der gemacht Anwendungsblock protokollieren. Siehe diesen Post auf MSDN:
Ich implementierte eine einfache Hilfsmethode, um die Filterwerte umzuschalten: Wenn ich mehr ausführliche Nachrichten möchte, erlaube ich diesen Einträgen registriert zu werden, indem ich den maximalen Prioritätswert erhöhe. Ebenso, wenn ich nur Ausnahmen oder andere sehr wichtige Nachrichten protokolliert werden sollen, habe ich den Prioritätsbereich auf 0 bis 1.
var path = System.IO.Path.Combine(Environment.CurrentDirectory, "EntLib.config");
var xd = XDocument.Load(path);
var x = (from z in xd.Root.Elements("loggingConfiguration").Elements("logFilters").Elements() where (z.Attribute("name").Value == "Priority Filter") select z).SingleOrDefault();
x.Attribute("minimumPriority").Value = 1; // Change this value...
x.Attribute("maximumPriority").Value = 5; // ... and this one to specify the range you want to log.
xd.Save(path);
Dies wird die Enterprise Library Logging-Funktionalität ändern, ohne Ihren Dienst als web.config Nachladen wird nie berührt. Einziger Nachteil ist, dass es erforderlich ist, dass Sie eine Art Konvention der Priorisierung/Kategorisierung der Protokolleinträge verwenden.
aktualisierte Frage - Ich schreibe eine 24/7 Server-App und würde gerne die Protokollierung in verschiedenen Bereichen für die Fehlersuche "ohne Neustart" –
"Bump" Das würde nicht passieren mit Config neu schreiben, wie es neu starten würde. Keine große Sache, wenn Sie SQL für den Statusserver verwenden, aber es kann Leute mitten in einer Anfrage einbinden.Ich würde auf die Codebasis schauen oder erwägen, einen Logging-Windows-Dienst zu bauen, wie Sie dort anhängen können. –