3

TraceSource を使用して ASP.Net アプリケーションをログに記録しています。出力形式を変更するには、TextwriterListener の代わりに独自の TraceListener を作成する必要があります。

   <trace>
        <listeners>
            <remove name="Default" />
             <add name="Default"
             type="WebTracing.CustomTraceListener, WebTracing" initializeData="Weblog.txt" traceOutputOptions="None"/>
        </listeners>
    </trace>

 public class CustomTraceListener : TextWriterTraceListener
 {
    public override void Write(string message)
    {
        if (NeedIndent)
        {
            WriteIndent();
        }
        message = //customize format
        base.Write(message); 
    }

    public override void WriteLine(string message)
    {
        if (NeedIndent)
        {
            WriteIndent();
        }
        message = //customize format
        base.WriteLine(message);
        NeedIndent = true;
    }
 }

// 呼び出す

        CustomTraceListener obj = new CustomTraceListener();
        obj.TraceEvent(null, "This is a critical message", TraceEventType.Critical, 0);
        (or)
         obj.Write( "This is a critical message");
        obj.Close();

エラーなし。出力ファイルにデータが印刷されません。私は ASP.Net を初めて使用します。この問題の解決を手伝ってくれる人はいますか?

アップデート


別の方法を試しました。ただし、構成エラーが発生します。

<trace autoflush="true" />
<sources>
  <source name="Trace" switchName="mySwitch" switchType="System.Diagnostics.SourceSwitch">    
      <listeners>
        <remove name="Default" />
        <add name="Default"
             type="WebTracing.CustomTraceListener, WebTracing" initializeData="Weblog.txt" traceOutputOptions="None"/>
      </listeners>      
  </source>
</sources>
<switches>
  <add name="mySwitch" value="All"/>
</switches>


        TraceSource obj = new TraceSource("Trace");
        obj.TraceEvent(TraceEventType.Critical,0,"This is a critical message");
        obj.Close();

例外の詳細: System.Configuration.ConfigurationErrorsException: WebTracing.CustomTraceListener、WebTracing を作成できませんでした。

注: 通常の TextWriterListener は正常に動作しています。しかし、出力文字列をフォーマットするにはカスタムリスナーが必要です。

4

5 に答える 5

0

クラスにパブリック修飾子を追加することをお勧めします

そして、あなたは使用することができます

System.Diagnostics.Trace.Write method
于 2013-03-19T14:35:13.773 に答える
0

Trace Listener に直接書き込むことはありません。この場合、System.Diagnostic.Trace オブジェクトは Trace Listener に書き込みます。TraceSources を使用していた場合は、トレース ソースに書き込み、config ファイルを使用して、TraceSource がトレース情報を受信するために登録されているリスナーを認識できるようにします。

また、通常はフラッシュ間隔があるファイルに書き込んでいるため、自動フラッシュであることを確認するか、テストでフラッシュをトリガーするのに十分なデータを書き込んでください (データがファイルに書き込まれるとき)。

于 2013-03-19T15:42:08.843 に答える
0

相対パスinitializeData="Weblog.txt"を絶対に変更するだけinitializeData="d:\Weblog.txt"です。custom-listner ログ ファイルの作成が機能しない根本的な原因を突き止めようとしています。

これは、プロジェクト フォルダーのアクセス許可が構成されていないことが原因である可能性があると思います: SO link


本日同じ問題を再現しましたが、アプリケーションが適切に構成されていることがわかりました。custom-listener を使用してログ ファイルを作成するには、適切な構成が十分な条件ではないことを理解するのに数時間かかりました。

TextWriterTraceListenerを実行すると、プロジェクトのフォルダーにログが作成されます。ただし、CustomTextWriterTraceListenerは何も作成しません。


于 2016-03-05T23:20:32.757 に答える