2014-05-17 19 views
0

我創建了一個從基類EventSource派生的「記錄器」類(事件提供程序)。我用它來測試我的應用程序。現在,要查看我的應用程序記錄的跟蹤消息,我使用了perfview GUI工具 - 首先註冊我的事件提供程序「* Logger」,然後通過此工具啓動收集過程。 一旦收集完成,我可以查看我記錄的events.This工作正常,但我需要自動化的過程。如何註冊EventSource etw提供程序C#並將輸出捕獲到日誌文件。

當嘗試自動化這個過程我面臨着兩個問題:

  1. 我如何註冊我的事件提供(最好僅使用C#庫或微軟提供的命令行工具[不想使用任何第三方工具或庫來執行此操作。])
  2. 如何使用Logman(或任何其他命令行工具)將工具記錄到etl文件中。

我提供我下面的應用程序源代碼(代碼非常簡單和直接的。):

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using System.Threading.Tasks; 
    using System.Diagnostics.Tracing; 
    using System.Threading; 

    namespace EventLogging 
    { 
    class Program 
    { 
    static void Main(string[] args) 
    { 
     Logger log = Logger.GetLogger(); 
     for (int i = 0; i < 100000; i++) 
     { 
      log.WriteError("Logging some serious error",i); 
      log.WriteWarning("Logging warning",i); 
     } 

    } 
    } 

    /// <summary> 
    /// Logger writes to instance. 
    /// 
    /// </summary> 
    class Logger : EventSource 
    { 
    /// <summary> 
    /// 
    /// </summary> 
    static private Logger _log; 

    /// <summary> 
    /// only one instance of Logger can be created. 
    /// </summary> 

    public static Logger GetLogger(){ 
     if (_log == null) 
      return (_log = new Logger()); 
     else 
      return _log; 
    } 
    private Logger() 
     : base() 
    { 

    } 

    [Event(101,Message="Application Failure Message: {0}",Level=EventLevel.Error)] 
     public void WriteError(String message1,int value){ 

     WriteEvent(101, message1,value); 

    } 
    [Event(102,Message="Application Warning Message: {0}",Level=EventLevel.Warning)] 
    public void WriteWarning(String message,int value) 
    { 
     WriteEvent(102, message,value); 
    } 




    } 


    } 

回答

相關問題