実際には非常に簡単に達成できます。次の手順に従うだけです。
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 構成に加えられた変更は無視されます。ただし、Logging Application Block に加えられた変更は除きます。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 がまったく変更されないため、サービスをリロードせずに Enterprise Library Logging 機能が変更されます。唯一の欠点は、ログエントリの優先順位付け/分類のある種の規則を使用する必要があることです。