1

コード内に特定の名前でトレース ソースを作成した後、app.config のセクションを使用して、実行時にリスナーをアタッチしたいと考えています。

ここに私のapp.configがあります:

  <system.diagnostics>
    <trace autoflush="true"/>
    <sources>
      <source name="myTraceSource"
              switchName="mySwitch"
              switchType="System.Diagnostics.SourceSwitch" >
        <listeners>
          <clear/>
          <add name="textwriterListener"
            type="System.Diagnostics.TextWriterTraceListener"
            initializeData="c:\dev\mylog.txt"
            traceOutputOptions="ProcessId, DateTime, Callstack" />
        </listeners>
      </source>
    </sources>
    <switches>
      <add name="mySwitch" value="Verbose" />
    </switches>
  </system.diagnostics>

コードでメッセージが生成されていることがわかります

this.TraceSource.TraceEvent(TraceEventType.Verbose, 0, p_message);

しかし、ログ ファイルには何も出力されません (作成さえされません)。ブレークポイントを設定して を見るとthis.TraceSource.Listeners、空です。

ここで私が間違っていること、またはこの種のデバッグに関するヒントはありますか? このような既存のソースに新しいリスナーをアタッチすることさえ可能ですか?

また、次のことを試しましたが、成功しませんでした。

 <system.diagnostics>
   <trace autoflush="true" indentsize="4">
     <listeners>
       <add name="TextListener" 
           type="System.Diagnostics.TextWriterTraceListener"
           initializeData="c:\dev\mylog.txt" />
       <remove name="Default" />
     </listeners>
   </trace>
 </system.diagnostics>
4

1 に答える 1

4

構成ファイルで指定したディレクトリが存在しない場合に発生する可能性があります。つまり、TraceSource インスタンスを初期化する方法を示していないため、それとは関係がないかどうかはわかりません。いずれにせよ、構成セクションを使用する単純なコンソール アプリケーションは問題なく動作します。

class Program
{
    static TraceSource ts = new TraceSource("myTraceSource");

    static void Main(string[] args)
    {
        ts.TraceEvent(TraceEventType.Verbose, 0, "Hello");
    }
}

また、app.config が完全であることを確認してください。System.Diagnostics セクションのみを投稿していたと思いますが、完全な例を次に示します。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.diagnostics>
    <trace autoflush="true"/>
    <sources>
      <source name="myTraceSource"
              switchName="mySwitch"
              switchType="System.Diagnostics.SourceSwitch" >
        <listeners>
          <clear/>
          <add name="textwriterListener"
            type="System.Diagnostics.TextWriterTraceListener"
            initializeData="c:\dev\mylog.txt"
            traceOutputOptions="ProcessId, DateTime, Callstack" />
        </listeners>
      </source>
    </sources>
    <switches>
      <add name="mySwitch" value="Verbose" />
    </switches>
  </system.diagnostics>
</configuration>
于 2012-09-25T17:49:17.540 に答える