На самом деле это довольно легко достичь, просто выполните следующие действия:
Поместить конфигурацию Enterprise Library в отдельный файл
<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>
Добавить фильтр регистрации. Вы можете использовать приоритеты или категории записей журнала для фильтрации записей журнала, поэтому в своем коде вы должны соответственно установить приоритет или категорию. Например, вы хотите дать очень важные сообщения и номер с низким приоритетом, например, 1, и более подробное сообщение может быть 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>
Любые изменения, внесенные в конфигурацию Enterprise Library во время выполнения, игнорируются - за исключением изменений, внесенных в блок приложения ведения журнала. См. Этот пост в MSDN: Обновление параметров конфигурации во время выполнения
Я реализовал простой вспомогательный метод для переключения значений фильтра: когда я хочу больше подробных сообщений, я разрешаю регистрировать эти записи, увеличивая максимальное значение приоритета. Аналогичным образом, когда я хочу, чтобы регистрировались только исключения или другие очень важные сообщения, я устанавливаю диапазон приоритетов от 0 до 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);
Это изменит функциональность ведения журнала корпоративной библиотеки без перезагрузки службы, так как web.config никогда не затрагивается. Единственным недостатком является то, что требуется, чтобы вы использовали соглашение типа soem для определения приоритетов / классификации записей журнала.