0
我創建了一個從基類EventSource派生的「記錄器」類(事件提供程序)。我用它來測試我的應用程序。現在,要查看我的應用程序記錄的跟蹤消息,我使用了perfview GUI工具 - 首先註冊我的事件提供程序「* Logger」,然後通過此工具啓動收集過程。 一旦收集完成,我可以查看我記錄的events.This工作正常,但我需要自動化的過程。如何註冊EventSource etw提供程序C#並將輸出捕獲到日誌文件。
當嘗試自動化這個過程我面臨着兩個問題:
- 我如何註冊我的事件提供(最好僅使用C#庫或微軟提供的命令行工具[不想使用任何第三方工具或庫來執行此操作。])
- 如何使用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);
}
}
}