2

アプリケーションで FileTraceListeners を構成したいと考えています。これは、「詳細」レベルのメッセージを無視しますが、「情報」レベル以上、および「開始」イベントと「停止」イベントをログに記録します。

すべてが app.config ファイル内で構成されます。ただし、これらの異なるトレース レベルを組み合わせる正しい構文が見つかりません。 フィルタの構文については、こちらで説明しています

「情報」に 1 つのフィルターを使用すると、「情報」、「警告」、「エラー」、または「重大」以外のすべてが正しく除外されます。ただし、「開始」イベントと「停止」イベントも含めたいと思います。

2つのフィルターを使用してみました:

<filter type="System.Diagnostics.EventTypeFilter" initializeData="Information"/>
<filter type="System.Diagnostics.EventTypeFilter" initializeData="ActivityTracing"/>

initializeDateを組み合わせてみた

コンマ付き: initializeData="Information,ActivityTracing"

またはセミコロン initializeData="Information;ActivityTracing"

すべてが構文エラーを引き起こすだけです。

これら 2 つのフィルターを app.config 内で組み合わせるにはどうすればよいですか?

(私はネイティブの .net 3.5 ロギング ライブラリを使用しており、現時点では log4net または別のフレームワークに変更したくありません。)

4

4 に答える 4

2

私のコードは次のようになります:

<filter type="System.Diagnostics.EventTypeFilter"   initializeData="Warning,ActivityTracing"/> 

とその作品。

于 2015-11-25T09:17:32.960 に答える
1

を使用しようとはしませんでした<filter>が、最近似たようなものをセットアップし、<switches>and<sources>要素を使用して成功しました。これが私がそれをした方法です:

 <system.diagnostics>
   <trace autoflush="true" indentsize="2" />
   <sources>
     <source name="SyncService" switchName="infoactivity">
       <listeners>
         <clear />
         <add name="file" />
       </listeners>
     </source>
   </sources>
   <switches>
     <add name="none" value="Off" />
     <add name="infoactivity" value="Information, ActivityTracing" />
     <...>
   </switches>
   <sharedListeners>
     <add name="file" type="System.Diagnostics.TextWriterTraceListener" 
          initializeData="sync.log" />
   </sharedListeners>
 </system.diagnostics>

値を定義済みのスイッチのいずれかに変更するだけswitchNameで、適切なレベルのログを取得できます。

このコードでは、LogEvent スマート列挙型クラスにラップされた単一の静的 TraceSource を使用しました (Jon Skeet の回答の 1 つで例を見つけたと思います)。

public class LogEvent {
  public static readonly LogEvent SyncStart = new LogEvent(1, 
    "Sync Service started on {0}", TraceEventType.Start);
  public static readonly LogEvent SyncStop = new LogEvent(99, 
    "Sync Service stopped on {0}", TraceEventType.Stop);
  public static readonly LogEvent SyncError = new LogEvent(501, 
    "\r\n=============\r\n{0}\r\n==============\r\n", TraceEventType.Error);
  // etc

  private readonly int id;
  private readonly string format;
  private readonly TraceEventType type;
  private static readonly TraceSource trace = new TraceSource("SyncService");

  private LogEvent(int id, string format, TraceEventType type)
  {
    this.id = id;
    this.format = format;
    this.type = type;
  }

  public void Log(params object[] data)
  {
    var message = String.Format(format, data);
    trace.TraceEvent(type, id, message);
  }
}

サービス コードでは、ロギング ステートメントに惜しみなく振りかけました。

LogEvent.SyncStart.Log(DateTime.Now);
LogEvent.SyncError.Log("What the??? -- " + e.Message);
LogEvent.SyncStop.Log(DateTime.Now);
于 2013-08-15T15:58:02.053 に答える
0

ここでは、ビットごとに組み合わせることができると言っています: MSDN

試しましたinitializeData="Information|ActivityTracing"か?

于 2012-07-10T12:41:45.010 に答える