プログラム

C#プログラミングレッスン

C#での .NETプログラミングを易しく丁寧に解説するメールマガジンです。「C#プログラミング・レッスン」で、.NETプログラミングをマスターしましょう。

全て表示する >

【C#プログラミングレッスン】 No.138-TraceSource(6)

2007/08/29

┏━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━┳━┳━┓
┃☆┃ C#プログラミングレッスン                         ┃_┃□┃×┃
┣━┻━━━━━━━━━━━━━━━━━━━━━━━━━┻━┻━┻━┫
┃ TraceSource(6)                                             No.138┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

前回は、Filterの説明をしました。今回は、独自のFilterを作成してみます。


■──────────────────────────────────
■ 独自Filter

まずは、作成したサンプルFilterのコードをご覧ください。
コンストラクタで、文字列を受け取り、"Error | Warning" という文字列を渡
されると、Error と Warning だけを通すというフィルタの例です。

Filterを作成するには、TraceFilter抽象クラスを継承します。

using System;
using System.Diagnostics;

namespace Gushwell {
   public class MyFilter : TraceFilter {
      private TraceEventType _filter;

      public MyFilter(string eventTypeStr) {
         string[] names = eventTypeStr.Split('|');
         foreach ( string s in names )
            _filter |= (TraceEventType)Enum.Parse(
                                       typeof(TraceEventType),s);
      }

      public override bool ShouldTrace(
                              TraceEventCache cache, string source,
                              TraceEventType eventType, int id,
                              string formatOrMessage, object[] args,
                              object data1, object[] data) {
         return ( eventType & _filter ) == eventType;
      }
   }
}


■──────────────────────────────────
■ コンストラクタ

Filterを作成するには、TraceFilter抽象クラスを継承します。
"Error  | Warning | Information" といった | で連結された文字列を受け取
り、それを Splitで分解しています。
このひとつひとつの文字列を  Enum.Parseで、  TraceEventType に変換し、
_filter 変数に記憶していきます。
TraceEventType 列挙体は、 Flags 属性が付いていないので、反則技ではあり
ますが、

  Critical    : 1
  Error       : 2
  Warning     : 4
  Information : 8
  Verbose     : 16
  Start       : 256
  Stop        : 512
  Suspend     : 1024
  Resume      : 2048
  Transfer    : 4096

という値をとるので、_filter というひとつの変数に、これらの値を記憶でき
ます。


■──────────────────────────────────
■ ShouldTrace メソッド

トレース  リスナでイベントをトレースする必要があるかどうかを決定するメ
ソッドで、必ず、overrideする必要があります。
ShouldTraceメソッドは沢山の引数を受け取りますが、ここでは、eventType引
数だけを見ればよいことになります。 eventTypeを通すにならば、trueを通さ
ないならば falseを返すようにします。

_filter と eventType の and をとれば、そのイベントを通すか、通さないか
を判断できます。

※ |  や  &  のビット演算についてわからない方は、 バックナンバー Np059
   「ビットフラグ」ご覧ください。


■──────────────────────────────────
■ 構成ファイルの記述

上記、MyFilter クラスを構成ファイルに指定してみましょう。

<listeners>
   <remove name="Default" />
   <add name="ConsoleFile"
        type="System.Diagnostics.ConsoleTraceListener">
      <filter type="System.Diagnostics.EventTypeFilter"
              initializeData="Error" />
   </add>
   <add name ="Default"
        type="System.Diagnostics.DefaultTraceListener">
      <filter type="Gushwell.MyFilter, ClassLibrary"
              initializeData="Information | Warning" />
   </add>
</listeners>

※ Gushwell.MyFilter クラスは、ClassLibrary.dll に格納されているものと
   して記述しています。

これでデバッグ実行すれば、コンソール画面には、

  MyTraceSource01 Critical: 1 : 重大なエラーです
  MyTraceSource01 Error: 2 : エラーです

と表示され、VS2005に出力ウィンドウには、

  MyTraceSource01 Warning: 3 : 警告です
  MyTraceSource01 Information: 4 : 情報です

と表示されます。
トレースを利用する側のプログラムは、前回と同じですので、省略します。

┌─┬─────────────────────────┬─┬─┬─┐
│☆│ C#プログラミングレッスン  (ぼぼ週刊)            │_│□│×│
├─┴─────────────────────────┴─┴─┴─┤
│ Published by Gushwell.                                           │
│ Copyright (C) 2004-2007 Gushwell All rights reserved.            │
│ Microsoft MVP Visual Developer - Visual C#(Apr 2005 - Mar 2008)  │
│-------------------- Gushwell's Page ---------------------------- │
│ 窓際プログラマーの独り言  :http://blog.livedoor.jp/gushwell/    │
│ 窓際プログラマーの読書三昧:http://gushwell.jugem.jp/            │
│ C#デザインパターン :                                             │
│  『増補改訂版Java言語で学ぶデザインパターン入門 / 結城 浩(著)』  │
│   のサンプルコードをC#に移植したものを掲載しています。           │
│   移植後のコードの公開は、結城氏の了解を得ています。             │
│   http://blog.livedoor.jp/gushwell/archives/50333227.html        │
└─────────────────────────────────┘

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
       【ポコカ】がおサイフ携帯の新しい利用方法を提案します。

  お店のクーポン・会員カード・スタンプカードをケータイにひとまとめ

         ☆ おサイフケータイとお店をつなげるポータルサイト ☆
           Pococa!(R)ポコカ URL: http://www.pococa.com/ct/
---------------------------------------------------------------------

規約に同意してこのメルマガに登録/解除する

メルマガ情報

創刊日:2004-08-12  
最終発行日:  
発行周期:ほぼ週刊  
Score!: 非表示   

コメント一覧コメントを書く

この記事にコメントを書く

上の画像で表示されている文字を半角英数で入力してください。

※コメントの内容はこのページに公開されます。発行者さんだけが閲覧できるものではありません。 コメントの投稿時は投稿者規約への同意が必要です。

  • コメントはありません。