5

app.config で、詳細、警告、なしの 3 つのトレース レベル (スイッチ?) を設定したいと考えています。コードのデバッグ バージョンでは、verbose スイッチをアクティブにしたいのですが、リリースでは警告が必要です。特殊なケースでは、アプリケーション ユーザーは構成ファイルを変更してすべてのトレースを無効にすることができます。

デバッグ トレースはコンソールに出力し、リリース トレースはログ ファイルにのみ出力したい。

私は、次のように書いています。

[...]
<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 を呼び出します。

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

[...]

私が思うに欠けているものがあります。Trace メソッドに使用する適切なスイッチを指定するにはどうすればよいですか?? アプリケーション ユーザーが構成ファイルを変更してトレースを許可または無効にするにはどうすればよいですか?

ありがとう。

4

1 に答える 1

7

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

TraceSource オブジェクトを使用すると、(スイッチを介して) 個別に制御可能な "ログ オブジェクト" を使用できるため、コードの一部のログをオンにし、コードの他の部分のログをオフにすることができます。TraceSource オブジェクトからの出力は、異なる TraceListeners (または同じ TraceListener) に送信されるように構成できます。Trace.WriteLine はあまり柔軟ではありません。1 つのレベルのみで構成できます (つまり、グローバルに Debug または Info などでログを記録できます)。一方、TraceSources を使用すると、1 つの TraceSource が Debug でログを記録し、別の TraceSource が Info でログを記録し、別の TraceSource が完全にオフになる可能性があります。

TraceSources を構成する方法とコードでそれらを使用する方法の例については、これらのリンクで私の回答を参照してください。

クラス間で TraceSource を使用する方法

app.config でトレースをオフにする

ロギングへの最良のアプローチは何ですか?

Trace メソッドを System.Diagnostics.TraceListener に追加します。

トレース/ロギングをデバッグとリリースでどのように機能させるかについては、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 を調べてみてください。

于 2011-01-12T18:18:04.750 に答える