ログトレース.NETフレームワーク


ロギングは、ソフトウェア開発において非常に重要な部分です.これは、開発プロセスのエラー状態を記録し、トレースするために使用されます.これは、問題が発生した後のエラーを調査するのに役立ちます.記録は、コマンドライン、ログファイル、イベントログ、特殊なデータベースまたはWebサービスで行うことができます.
トレースはプログラムの実行に関する情報を記録するためのログ記録の特別な使用です.情報は、デバッグのためのプログラマによって使用され、トレースログに含まれる詳細に応じてソフトウェアで一般的な問題を診断するために使用することができます.
この記事では、トレースのトレース方法を示します.TraceSourceクラスを使用するNET Frameworkワークワークス.トレースの基礎は、ログファイルでありえたそれぞれの割り当てられた出力媒体にデータを転送するスイッチを使用してリスナに送られるメッセージを追跡することです.
これを実証するには、PowerShellスクリプトを実行する単純なコンソールアプリケーションを作成します.次の手順は、スナップショットとコード例での追跡方法を示します.
  • PowerShellスクリプトを作成します.スクリプトは単にget process cmdletを使ってコンピュータシステム上で実行されているプロセスを取得します.
  • get-process
    
  • Visual Studioで新しいコンソールプロジェクトを作成します.NET FrameworkとC言語のプログラミング言語です.詳細はthis tutorialをチェックしてください.
  • TraceSourceクラスのインスタンスを作成します.これはTraceSourceの名前です.
  • private static TraceSource mySource = new TraceSource("LogTracing")
    
  • コンソールアプリケーションからPowerShellスクリプトを実行するためのプロセスを書き込みます.以下のコードスニペットは、その方法を示しています.「redirectstandarderror」と「redirectStandardOutput」というパラメータは、エラーと出力をそれぞれ別の場所、例えばログファイルにリダイレクトするかどうかを決定します.“dataReceivedeventHandler”は、受信されているイベントを処理し、それを出力、またはエラーデータと見なされるプロセスに渡します.
  • static void RunScript()
    {
     var psFile =Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).Parent.FullName, @"log_tracing.ps1");
                if (File.Exists(psFile))
                {
                    var startInfo = new ProcessStartInfo()
                    {
                        FileName = "powershell.exe",
                        Arguments = $"-ExecutionPolicy unrestricted -file \"{psFile}\"",
                        UseShellExecute = false,
                        Verb = "runas",
                        RedirectStandardError = true,
                        RedirectStandardOutput = true
                    };
                    using(Process myprocess = Process.Start(startInfo))
                    {
                        myprocess.OutputDataReceived += new DataReceivedEventHandler(OutputHandler);
                        myprocess.ErrorDataReceived += new DataReceivedEventHandler(ErrorHandler);
                        myprocess.BeginOutputReadLine();
                        myprocess.BeginErrorReadLine();
                        myprocess.WaitForExit();
                    }
                }
            }
    
  • ErrorHandlerメソッドとOutputHandlerメソッドが以下のスニペットに表示されます.TraceSourceクラスにはトレーストレースメッセージをトレースリスナーに書き込むTraceEventメソッドがあります.トレースリスナーは、アプリケーションで追加されます.設定ファイル.
  • private static void ErrorHandler(object sender, DataReceivedEventArgs e)
    {
      // write the error text to the file if there is something to write
       if (!String.IsNullOrEmpty(e.Data))
       {
          mySource.TraceEvent(TraceEventType.Error, 2, e.Data);
       }
    }
    
    private static void OutputHandler(object sender, DataReceivedEventArgs e)
    {
      // write the output text to the file if there is something to write
     if (!String.IsNullOrEmpty(e.Data))
     {
       mySource.TraceEvent(TraceEventType.Information, 1, e.Data);
     }
    }
    
    アプリで
  • .トレースリスナーが追加され、また、トレースソース名“logtrace”が追加されます.SwitchNameとSwitchTypeが定義されます.“logtracinglistener”という名前のリスナーが追加されます.冗長な、警告、情報、エラーの4つのTraceLeel列挙体があります.詳細はin the docsです.焦点はこの記事の「情報」です.
  • <system.diagnostics>
        <sources>
          <source name="LogTracing"
            switchName="sourceSwitch"
            switchType="System.Diagnostics.SourceSwitch">
            <listeners>
              <add name="LogTracingListener"/>
              <remove name="Default"/>
            </listeners>
          </source>
        </sources>
        <switches>
          <add name="sourceSwitch" value="Information"/>
        </switches>
        <sharedListeners>
          <add name="LogTracingListener"
            type="System.Diagnostics.TextWriterTraceListener"
            initializeData="LogTracingListener.txt">
            <filter type="System.Diagnostics.EventTypeFilter"
              initializeData="Information"/>
          </add>
        </sharedListeners>
      </system.diagnostics>
    
  • コードを実行し、プロジェクトのbinフォルダにログファイルを見つけます.
  • 詳細についてはMicrosoft docsを確認してください.また、コードのrepoを確認してください.
    読書ありがとう!