Trace.TraceInformation/Warning/Error は、TraceSwitch で設定されたレベルを尊重すると思います。
調査の結果、TraceSwitch インスタンスはいくつでも存在できることが明らかになったため、どのインスタンスが動作を制御する必要があるかは明確ではありません。TraceSwitch インスタンスのレベルを config から取得する方法があります。インスタンスを作成するときに、一致する名前を指定するだけです。
私が設計した場合、Trace クラスには、config の最初のトレース スイッチ定義によって設定される静的プロパティ TraceSwitch があり、TraceInfo などのメソッドは次のように動作します。
public static void TraceInformation(string message, params object[] p)
{
if (TraceSwitch.TraceInfo)
//base behaviour
}
これをラッパーとして作成するのは難しくありませんでした。
namespace System.Diagnostics
{
public static class TraceEx
{
private static TraceSwitch __traceSwitch;
public static TraceSwitch TraceSwitch
{
get { return __traceSwitch; }
set { __traceSwitch = value; }
}
static TraceEx()
{
__traceSwitch = new TraceSwitch("Default", "Default trace level is Off");
}
public static void TraceError(string message, params object[] p)
{
if (TraceSwitch.TraceError)
Trace.TraceError(message, p);
}
public static void TraceInformation(string message, params object[] p)
{
if (TraceSwitch.TraceInfo)
Trace.TraceInformation(message, p);
}
public static void TraceWarning(string message, params object[] p)
{
if (TraceSwitch.TraceWarning)
Trace.TraceWarning(message, p);
}
public static void Write(string message, params object[] p)
{
if (TraceSwitch.TraceVerbose)
Trace.Write(string.Format(message, p));
}
public static void WriteLine(string message, params object[] p)
{
Write(message + "\r\n", p);
}
}
}
これを同じ名前空間に配置するということは、プロジェクトを参照して Trace の名前を TraceEx に変更するだけでよいということです。私が提起している質問はこれです: なぜマイクロソフトはこのようにしなかったのですか? 私が見たことのない迫り来る落とし穴はありますか?
まあ、それは予想外でした(受け入れられた回答を参照)。これは、私がグランドデザインを理解していなかったと疑ったことが正しかったことを示すだけです. 上記のすべては次のようになります。
<userSettings>
<TraceFilterExperiment.Properties.Settings>
<setting name="TraceLevel" serializeAs="String">
<value>Warning</value>
</setting>
</TraceFilterExperiment.Properties.Settings>
</userSettings>
var eventTypeFilter = new EventTypeFilter(Properties.Settings.Default.TraceLevel);
foreach (TraceListener L in Trace.Listeners)
L.Filter = eventTypeFilter;
しかし、TraceSwitch で実際に何ができるかについては、まだ漠然としています。