方法 : トレース ソースを作成し初期化する
更新 : 2007 年 11 月
トレース ソースは、構成ファイルを使用してもしなくても作成および初期化できますが、実行時にトレース ソースによって作成されるトレースの再構成を容易にするために構成ファイルを使用することをお勧めします。
構成ファイルを使用してトレース ソースを作成し、初期化するには
次のサンプル コードは、手順 2. に示すアプリケーション構成ファイルと一緒に実行するものとして作成されています。構成ファイルは、アプリケーションが初期化されるときにトレース ソースの設定を初期化します。アプリケーションは、構成ファイルによって設定されたプロパティを動的に変更し、ユーザーによって指定された設定値をオーバーライドできます。たとえば、現在の構成設定とは無関係に、警告メッセージが常にテキスト ファイルに送られるようにすることもできます。次のサンプル コードは、構成ファイルの設定値をオーバーライドして、警告メッセージがトレース リスナに出力されるようにする方法を示しています。アプリケーションの実行中に構成ファイルの設定値を変更しても、初期設定は変更されません。初期設定を変更するには、アプリケーションを再起動するか、または Refresh メソッドを使用して、プログラムによってアプリケーションを更新する必要があります。
using System; using System.Diagnostics; using System.Threading; namespace TraceSourceApp { class Program { private static TraceSource mySource = new TraceSource("TraceSourceApp"); static void Main(string[] args) { Activity1(); // Change the event type for which tracing occurs. // The console trace listener must be specified // in the configuration file. First, save the original // settings from the configuration file. EventTypeFilter configFilter = (EventTypeFilter)mySource.Listeners["console"].Filter; // Then create a new event type filter that ensures // critical messages will be written. mySource.Listeners["console"].Filter = new EventTypeFilter(SourceLevels.Critical); Activity2(); // Allow the trace source to send messages to listeners // for all event types. This statement will override // any settings in the configuration file. mySource.Switch.Level = SourceLevels.All; // Restore the original filter settings. mySource.Listeners["console"].Filter = configFilter; Activity3(); mySource.Close(); return; } static void Activity1() { mySource.TraceEvent(TraceEventType.Error, 1, "Error message."); mySource.TraceEvent(TraceEventType.Warning, 2, "Warning message."); } static void Activity2() { mySource.TraceEvent(TraceEventType.Critical, 3, "Critical message."); mySource.TraceInformation("Informational message."); } static void Activity3() { mySource.TraceEvent(TraceEventType.Error, 4, "Error message."); mySource.TraceInformation("Informational message."); } } }
コード例の TraceSourceTraceSourceApp を初期化するには、次の構成ファイルを作成します。実行可能なホストによってホストされるアプリケーションの構成ファイルは、そのアプリケーションと同じディレクトリに配置されます。この構成ファイルの名前は、アプリケーション名に拡張子 .config を付けた名前になります。たとえば、TraceSourceApp.exe は、TraceSourceApp.exe.config という名前の構成ファイルに関連付けられます。次の構成ファイル例は、コンソール トレース リスナと、前の手順で作成されたトレース ソースのテキスト ライタ トレース リスナを初期化する方法を示しています。この構成ファイルは、トレース リスナを設定するだけでなく、両方のリスナについてフィルタを作成し、トレース ソースのソース スイッチも作成します。トレース リスナを追加する 2 つの方法が示されています。1 つは、リスナをトレース ソースに直接追加する方法で、もう 1 つは、リスナを共有リスナ コレクションに追加したうえで、名前でリスナをトレース ソースに追加する方法です。2 つのリスナに対して識別されたフィルタは、異なるソース レベルで初期化されます。この結果、一部のメッセージが 2 つのリスナのいずれか一方のみによって書き込まれます。
<configuration> <system.diagnostics> <sources> <source name="TraceSourceApp" switchName="sourceSwitch" switchType="System.Diagnostics.SourceSwitch"> <listeners> <add name="console" type="System.Diagnostics.ConsoleTraceListener"> <filter type="System.Diagnostics.EventTypeFilter" initializeData="Warning"/> </add> <add name="myListener"/> <remove name="Default"/> </listeners> </source> </sources> <switches> <add name="sourceSwitch" value="Warning"/> </switches> <sharedListeners> <add name="myListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="myListener.log"> <filter type="System.Diagnostics.EventTypeFilter" initializeData="Error"/> </add> </sharedListeners> </system.diagnostics> </configuration>
構成ファイルを使わずにトレース ソース、リスナ、およびフィルタを初期化するには
トレース機能は、構成ファイルを使わずにコードだけを使用してトレース ソース全体にインストルメントすることもできます。この方法はお勧めできませんが、構成ファイルに依存しないでトレース機能を確保する必要がある場合もあります。
using System; using System.Diagnostics; using System.Threading; namespace TraceSourceApp { class Program { private static TraceSource mySource = new TraceSource("TraceSourceApp"); static void Main(string[] args) { mySource.Switch = new SourceSwitch("sourceSwitch", "Error"); mySource.Listeners.Remove("Default"); TextWriterTraceListener textListener = new TextWriterTraceListener("myListener.log"); ConsoleTraceListener console = new ConsoleTraceListener(false); console.Filter = new EventTypeFilter(SourceLevels.Information); console.Name = "console"; textListener.Filter = new EventTypeFilter(SourceLevels.Error); mySource.Listeners.Add(console); mySource.Listeners.Add(textListener); Activity1(); // Set the filter settings for the // console trace listener. mySource.Listeners["console"].Filter = new EventTypeFilter(SourceLevels.Critical); Activity2(); // Allow the trace source to send messages to // listeners for all event types. mySource.Switch.Level = SourceLevels.All; // Change the filter settings for the console trace listener. mySource.Listeners["console"].Filter = new EventTypeFilter(SourceLevels.Information); Activity3(); mySource.Close(); return; } static void Activity1() { mySource.TraceEvent(TraceEventType.Error, 1, "Error message."); mySource.TraceEvent(TraceEventType.Warning, 2, "Warning message."); } static void Activity2() { mySource.TraceEvent(TraceEventType.Critical, 3, "Critical message."); mySource.TraceInformation("Informational message."); } static void Activity3() { mySource.TraceEvent(TraceEventType.Error, 4, "Error message."); mySource.TraceInformation("Informational message."); } } }