1 //----------------------------------------------------------------
2 // Copyright (c) Microsoft Corporation. All rights reserved.
3 //----------------------------------------------------------------
5 namespace System.Runtime
8 using System.Collections.Generic;
10 using System.Diagnostics;
13 /// Microsoft (11/15/10, CSDMain 194940) - Previously, this code first checked that the opcode was set to informational. If not, it would check
14 /// the opcode name for start, stop, suspend, or resume and use that or return Information otherwise. This does not work well with the latest
15 /// ETW changes where almost every event has a task and opcode. With the old logic, if an opcode is set on the event with a level such as
16 /// warning or error, the level would be incorrectly reported in diagnostic tracing as informational. Also, start/stop/suspend/resume events
17 /// have an overloaded meaning in diagnostic tracing that the svctraceviewer would misinterpret. To keep diagnostic tracing from breaking, this
18 /// class now checks for start/stop/suspend/resume opcodes and returns the level if any of those do not match. Furthermore, any events defined
19 /// that are shared between diagnostics and ETW should not use start/stop/suspend/resume opcodes unless explicitly intended for use in
20 /// diagnostics tracing.
22 class TraceLevelHelper
24 static TraceEventType[] EtwLevelToTraceEventType = { TraceEventType.Critical, TraceEventType.Critical, TraceEventType.Error,
25 TraceEventType.Warning, TraceEventType.Information, TraceEventType.Verbose
28 internal static TraceEventType GetTraceEventType(byte level, byte opcode)
32 case (byte)TraceEventOpcode.Start:
33 return TraceEventType.Start;
34 case (byte)TraceEventOpcode.Stop:
35 return TraceEventType.Stop;
36 case (byte)TraceEventOpcode.Suspend:
37 return TraceEventType.Suspend;
38 case (byte)TraceEventOpcode.Resume:
39 return TraceEventType.Resume;
41 return EtwLevelToTraceEventType[(int)level];
45 internal static TraceEventType GetTraceEventType(TraceEventLevel level)
47 return EtwLevelToTraceEventType[(int)level];
50 internal static TraceEventType GetTraceEventType(byte level)
52 return EtwLevelToTraceEventType[(int)level];
55 internal static string LookupSeverity(TraceEventLevel level, TraceEventOpcode opcode)
60 case TraceEventOpcode.Start:
63 case TraceEventOpcode.Stop:
66 case TraceEventOpcode.Suspend:
69 case TraceEventOpcode.Resume:
75 case TraceEventLevel.Critical:
76 severity = "Critical";
78 case TraceEventLevel.Error:
81 case TraceEventLevel.Warning:
84 case TraceEventLevel.Informational:
85 severity = "Information";
87 case TraceEventLevel.Verbose:
91 severity = level.ToString();