Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何注册EventSource etw提供程序C#并将输出捕获到日志文件中。?_C#_Logging_Etw - Fatal编程技术网

如何注册EventSource etw提供程序C#并将输出捕获到日志文件中。?

如何注册EventSource etw提供程序C#并将输出捕获到日志文件中。?,c#,logging,etw,C#,Logging,Etw,我创建了一个从基类EventSource(事件提供程序)派生的“Logger”类。我用这个来处理我的申请。现在,为了查看应用程序记录的跟踪消息,我使用perfview GUI工具-首先注册我的事件提供程序“*Logger”,然后通过该工具启动收集过程。 收集完成后,我可以查看我记录的事件。这很好,但我需要自动化这个过程 在尝试自动化此过程时,我面临两个问题: 如何注册我的事件提供程序(最好只使用c#libraries或Microsoft提供的CLI工具[不想使用任何第三方工具或库来完成此操作])

我创建了一个从基类EventSource(事件提供程序)派生的“Logger”类。我用这个来处理我的申请。现在,为了查看应用程序记录的跟踪消息,我使用perfview GUI工具-首先注册我的事件提供程序“*Logger”,然后通过该工具启动收集过程。 收集完成后,我可以查看我记录的事件。这很好,但我需要自动化这个过程

在尝试自动化此过程时,我面临两个问题:

  • 如何注册我的事件提供程序(最好只使用c#libraries或Microsoft提供的CLI工具[不想使用任何第三方工具或库来完成此操作])
  • 如何使用Logman(或任何其他命令行工具)等工具将记录的事件收集到etl文件中
  • 我已经在下面提供了我的应用程序源代码(代码非常简单明了):

    使用系统;
    使用System.Collections.Generic;
    使用System.Linq;
    使用系统文本;
    使用System.Threading.Tasks;
    使用System.Diagnostics.Tracing;
    使用系统线程;
    命名空间事件日志
    {
    班级计划
    {
    静态void Main(字符串[]参数)
    {
    Logger log=Logger.GetLogger();
    对于(int i=0;i<100000;i++)
    {
    WriteError(“记录一些严重错误”,i);
    日志写入警告(“日志警告”,i);
    }
    }
    }
    /// 
    ///记录器写入实例。
    /// 
    /// 
    类记录器:EventSource
    {   
    /// 
    /// 
    /// 
    静态专用记录器_log;
    /// 
    ///只能创建记录器的一个实例。
    /// 
    公共静态记录器GetLogger(){
    如果(_log==null)
    返回(_log=new Logger());
    其他的
    返回日志;
    }
    专用记录器()
    :base()
    {
    }
    [事件(101,Message=“应用程序失败消息:{0}”,Level=EventLevel.Error)]
    public void WriteError(字符串message1,int值){
    WriteEvent(101,message1,value);
    }
    [事件(102,Message=“应用程序警告消息:{0}”,Level=EventLevel.Warning)]
    公共无效写警告(字符串消息,int值)
    {
    WriteEvent(102,消息,值);
    }
    }
    }
    
    使您能够捕获和处理ETW跟踪。它了解EventSource,因此没有理由注册任何内容。请参阅和。

    使您能够捕获和处理ETW跟踪。它了解EventSource,因此没有理由注册任何内容。看,还有

        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);
        }
    
    
    
    
        }
    
    
        }