.NET TraceLogging 示例
本主题包含一个 .NET TraceLogging 示例,该示例说明如何仅在会话详细级别为详细时记录事件,以及如何记录结构化事件数据。
using System;
using System.Text;
using System.Diagnostics.Tracing;
namespace MoreSimpleTraceLoggingExamples
{
class Program
{
private static EventSource log = new EventSource(
"SimpleTraceLoggingProvider",
EventSourceSettings.EtwSelfDescribingEventFormat);
static void Main(string[] args)
{
StringBuilder cmdLine = new StringBuilder();
foreach (string arg in args)
{
cmdLine.AppendFormat("{0} ", arg);
}
// Log event verbosity level and opcode
// This event is only logged when the session verbosity level is verbose.
log.Write("CmdLine", new EventSourceOptions {Level=EventLevel.Verbose, Opcode=EventOpcode.Info },
new { Args = cmdLine.ToString().TrimEnd() });
try
{
int j = 0;
int i = 1 / j;
}
catch (Exception e)
{
var error = new Error { ErrorTitle = e.Message, CallStack = e.StackTrace, ErrType = ErrorType.Exception };
log.Write("Error", new { Error = error, ErrorType = e.ToString() });
}
}
}
[EventData] // [EventData] makes it possible to pass an instance of the class as an argument to EventSource.Write()
public class Error
{
public string ErrorTitle { get; set; }
public string CallStack { get; set; }
public ErrorType ErrType { get; set; }
}
public enum ErrorType
{
Exception,
UserError,
ProgramError
}
}