2011-01-12 10 views
5

私のapp.configでは、3つのトレースレベル(スイッチ?)を設定したいと思います。 コードのデバッグバージョンでは、冗長スイッチをアクティブにする必要があります。リリースでは警告が欲しいです。特殊なケースでは、私のアプリケーションユーザはすべてのトレースを無効にするために設定ファイルを変更することができます。は理解できません.net 2010のトレースとapp.config

デバッグトレースをコンソールに出力したいのに対し、リリースはログファイルだけをトレースします。私が欠けている何かがあります

Public Shared Sub HandleException(ByVal ex As Exception) 
    Trace.WriteLine(ex.Message, "Error") 

[...]

:その後のコードで私はこのようなトレースを呼び出す

[...] 
<system.diagnostics> 
     <sources> 
      <!-- This section defines the logging configuration for My.Application.Log --> 
      <source name="debug" switchName="debug"> 
      <listeners> 
       <add name="FileLog"/> 
       <add name="console"/> 
      </listeners> 
      </source> 

      <source name="release" switchName="release"> 
      <listeners> 
       <add name="FileLog"/> 
      </listeners> 
      </source> 

      <source name="silent" switchName="none"> 
      <listeners/> 
      </source> 
     </sources> 


     <switches> 
      <add name="debug" value="Verbose"/> 
      <add name="release" value="Warning"/> 
      <add name="none" value="Off"/> 
     </switches> 


     <!--<sharedListeners> 
      <add name="FileLog" type="System.Diagnostics.TextWriterTraceListener" traceOutputOptions="DateTime" initializeData="felix.log"/> 
      <add name="console" type="System.Diagnostics.ConsoleTraceListener" initializeData="false" /> 
     </sharedListeners>--> 

     <trace autoflush="false" indentsize="4"> 
      <listeners> 
       <add name="FileLog" type="System.Diagnostics.TextWriterTraceListener" traceOutputOptions="DateTime" initializeData="felix.log"/> 
       <add name="console" type="System.Diagnostics.ConsoleTraceListener" initializeData="false"/> 
       <remove name="Default"/> 
      </listeners> 
     </trace> 

    </system.diagnostics> 
[...] 

私は、」次のように書かれましおもう。どのように右のスイッチを使用するTraceメソッドに言いますか?私のアプリケーションユーザは、トレースを許可するか、またはディセーブルにするためにconfigファイルをどのように変更できますか?

ありがとうございました。

答えて

7

TraceSourceオブジェクトを使用してログ/トレースを使用して、Trace.WriteおよびTrace.WriteLineを介してログ/トレースの概念を混在させているようです。

TraceSourceオブジェクトを使用すると、コードの一部をログオンしたり、コードの他の部分をオフにできるように、(スイッチ経由で)「ログオブジェクト」を個別に制御することができます。 TraceSourceオブジェクトの出力は、別のTraceListener(または同じTraceListener)に移動するように設定できます。 Trace.WriteLineはあまり柔軟性がありません。 TraceSourceでは、1つのTraceSourceがDebugでロギングされ、別のTraceSourceがInfoでロギングされ、別のTraceSourceがInfoでロギングされ、別のTraceSourceは完全にオフになることがあります。

TraceSourceを構成する方法の例とコードで使用する方法の例については、これらのリンクの回答を参照してください。あなたはトレーシング/ロギングがリリース対デバッグに仕事をしたいかについて

Add Trace methods to System.Diagnostics.TraceListener

What's the best approach to logging?

Turning tracing off via app.config

How to use TraceSource across classesは、次の2つの異なるapp.configをファイルを持つことができます。両方とも、同じTraceSources(すなわち、「名前付き」トレース/ロギング・オブジェクトの同じセット)を定義します。デバッグビルドで使用されるapp.configでは、トレース/ロギングレベルを1つの値Debug/Info/Whateverに設定し、出力をコンソールやファイルなどに指示することができます。デバッグビルドで使用されるapp.configでは、トレース/ロギングレベルを別の値(またはオフ)に設定し、出力をファイルに転送することがあります。

上記の両方の記事では、Ukadc.Diagnosticsプロジェクトを含む、System.Diagnosticsに関する情報へのリンクがいくつか含まれています。このプロジェクトは、System.DiagnosticsベースのTraceListeners(リスナーがUkadc.Diagnosticsから提供されている場合)を使って、実際のトレース/ロギングステートメントに変更を加えずに、非常に興味深い書式設定機能を提供します。書式設定機能は、log4netとNLogによって提供されるものと同様です。

上記のリンク先の情報を読み、役立つかどうかを確認してください。Trace.WriteLineではなく、TraceSourcesを使用してみてください。あなたがそれに慣れたら、Ukadc.Diagnosticsを調べてみてください。

+0

大変ありがとうございます。私はすべてを読んでしまいました。暗闇の中で光を当てました:)記事/ブログ記事/ウェブページを書くことをお勧めします。 。あなたがしたら、私にリンクを送ってください!再度、感謝します。 – vulkanino

+0

私は最終的にそれを理解しましたが、IDを使用してTraceEventメソッドに渡すことはできません。トレースソースを使用して、どこに(リスナー)とどのくらいの量(スイッチ)を記録するかを設定し、イベントタイプ(TraceEventType)をプログラムで指定すると、IDを指定する必要がありますか? – vulkanino

+1

イベントIDに関する1つのアイデアについては、この質問の最初の回答を参照してください:http://stackoverflow.com/questions/576185/logging-best-practices "その他の推奨事項"を参照してください。その提案に続いて、(TraceSource、TraceEventType、またはメッセージに関係なく)すべてのログメッセージを分類できます。特定の種類のメッセージの出力を照会/検索するのは比較的簡単です。たとえば、イベントID 1001が「ファイルから読み取る」を意味し、1002が「ファイルに書き込む」を意味する場合、ファイルの読み取りまたは書き込みに対応するすべてのログメッセージを出力で見つけることができます。 – wageoghe

関連する問題