20

次のコード:

static void Main(string[] args)
{
    TraceSource ts = new TraceSource("MyApplication");

    ts.Switch = new SourceSwitch("MySwitch");
    ts.Switch.Level = SourceLevels.All;

    ts.Listeners.Add(new TextWriterTraceListener(Console.Out));

    ts.TraceInformation("Hello World");
    Console.ReadKey();
}

次の出力が生成されます。

MyApplication 情報: 0 : Hello World

トレース出力の先頭にある「MyApplication Information: 0 :」の部分は、TraceSource クラス自体からのものです。

ただし、行の先頭にタイムスタンプを付ける必要があり、「情報」も「情報」に変更したいと考えています。

次のように構成できるように、トレース出力の自由度を高める方法はありますか?

13:03:00 - MyApplication情報: Hello World

数時間試しましたが、成功しませんでした。私が何をしても、出力行の先頭には常に、定義済みのこの定数「MyApplication Information: 0 : Hello World」出力があります。

MSDN のドキュメントにも、役立つ情報はありませんでした。

4

4 に答える 4

6

遅刻もしますが、他の誰かがここに着陸した場合に備えて...

シンプルにするのが好きです。App.cs 内で 1 つの静的 Trace メソッドを使用します。これは、起動時に作成する単一の TraceSource に関連付けられます。これにより、アプリ全体でアクセスでき、app.config をシンプルに保つことができます。

public static void Trace(TraceEventType eventType, string message)
{
    if (_TraceSource.Switch.ShouldTrace(eventType))
    {
        string tracemessage = string.Format("{0}\t[{1}]\t{2}", DateTime.Now.ToString("MM/dd/yy HH:mm:ss"), eventType, message);
        foreach (TraceListener listener in _TraceSource.Listeners)
        {
            listener.WriteLine(tracemessage);
            listener.Flush();
        }
    }
}

私の app.config エントリ:

  <system.diagnostics>
    <sources>
      <source name="mytracesource" switchValue="All">
        <listeners>
          <add name="mytracelistener"
               type="System.Diagnostics.TextWriterTraceListener"
               initializeData="trace.log">
          </add>
        </listeners>
      </source>
    </sources>
  </system.diagnostics>
于 2014-05-16T14:41:47.320 に答える
5

トレース リスナーでTraceOutputOptionsプロパティを設定します。形式は事前定義されていますが、 TraceOptions列挙で定義された追加のデータをオプトインできます。

于 2012-11-08T13:50:14.573 に答える
3

TraceSource.TraceInformationは、ヘッダーに追加する各リスナーでTraceListener.TraceEventを呼び出すことになります。幸いなことに、カスタム出力を生成するために使用できるWriteLineTraceListenerメソッドがあります。

static void Main(string[] args)
{
    TraceSource ts = new TraceSource("MyApplication");

    ts.Switch = new SourceSwitch("MySwitch");
    ts.Switch.Level = SourceLevels.All;

    ts.Listeners.Add(new TextWriterTraceListener(Console.Out));

    for (int i = 0; i < ts.Listeners.Count; i++)
    {
        var listener = ts.Listeners[i];

        listener.WriteLine(
            string.Format("{0} - {1} Info: {2}",
            DateTime.Now.ToString("HH:mm:ss"), ts.Name, "Hello World"));
        listener.Flush();
    }
    Console.ReadKey();
}

出力:

13:52:05 - MyApplication情報: Hello World

于 2014-03-30T17:52:31.777 に答える
1

少し遅いかもしれませんが、簡単で用途の広いソリューションが必要な場合は、CodePlex のEssentials Diagnosticsプロジェクト ( NuGet からも入手可能) を参照してください。

コンソール、ローリングテキストおよび XML ファイル、イベントログ、電子メールなどに出力する幅広いリスナー (カスタムフォーマットが許可されています) を定義し、構成サンプルも付属しています。

于 2014-03-18T10:28:32.497 に答える