/WCFWebApi/src/Microsoft.Server.Common/Microsoft/Server/Common/TraceLevelHelper.cs
C# | 96 lines | 77 code | 6 blank | 13 comment | 3 complexity | f7afce1dcfed7fdabcb2a24941e22c52 MD5 | raw file
Possible License(s): CC-BY-SA-3.0, Apache-2.0
- //----------------------------------------------------------------
- // Copyright (c) Microsoft Corporation. All rights reserved.
- //----------------------------------------------------------------
-
- namespace Microsoft.Server.Common
- {
- using System.Diagnostics;
-
- /// <remarks>
- /// dmetzgar (11/15/10, CSDMain 194940) - Previously, this code first checked that the opcode was set to informational. If not, it would check
- /// the opcode name for start, stop, suspend, or resume and use that or return Information otherwise. This does not work well with the latest
- /// 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
- /// warning or error, the level would be incorrectly reported in diagnostic tracing as informational. Also, start/stop/suspend/resume events
- /// have an overloaded meaning in diagnostic tracing that the svctraceviewer would misinterpret. To keep diagnostic tracing from breaking, this
- /// class now checks for start/stop/suspend/resume opcodes and returns the level if any of those do not match. Furthermore, any events defined
- /// that are shared between diagnostics and ETW should not use start/stop/suspend/resume opcodes unless explicitly intended for use in
- /// diagnostics tracing.
- /// </remarks>
- public static class TraceLevelHelper
- {
- static TraceEventType[] EtwLevelToTraceEventType = { TraceEventType.Critical, TraceEventType.Critical, TraceEventType.Error,
- TraceEventType.Warning, TraceEventType.Information, TraceEventType.Verbose
- };
-
- public static TraceEventType GetTraceEventType(byte level, byte opCode)
- {
- switch (opCode)
- {
- case (byte)TraceEventOpcode.Start:
- return TraceEventType.Start;
- case (byte)TraceEventOpcode.Stop:
- return TraceEventType.Stop;
- case (byte)TraceEventOpcode.Suspend:
- return TraceEventType.Suspend;
- case (byte)TraceEventOpcode.Resume:
- return TraceEventType.Resume;
- default:
- return EtwLevelToTraceEventType[(int)level];
- }
- }
-
- public static TraceEventType GetTraceEventType(TraceEventLevel level)
- {
- return EtwLevelToTraceEventType[(int)level];
- }
-
- public static TraceEventType GetTraceEventType(byte level)
- {
- return EtwLevelToTraceEventType[(int)level];
- }
-
- public static string LookupSeverity(TraceEventLevel level, TraceEventOpcode opCode)
- {
- string severity;
- switch (opCode)
- {
- case TraceEventOpcode.Start:
- severity = "Start";
- break;
- case TraceEventOpcode.Stop:
- severity = "Stop";
- break;
- case TraceEventOpcode.Suspend:
- severity = "Suspend";
- break;
- case TraceEventOpcode.Resume:
- severity = "Resume";
- break;
- default:
- switch (level)
- {
- case TraceEventLevel.Critical:
- severity = "Critical";
- break;
- case TraceEventLevel.Error:
- severity = "Error";
- break;
- case TraceEventLevel.Warning:
- severity = "Warning";
- break;
- case TraceEventLevel.Informational:
- severity = "Information";
- break;
- case TraceEventLevel.Verbose:
- severity = "Verbose";
- break;
- default:
- severity = level.ToString();
- break;
- }
- break;
- }
- return severity;
- }
- }
- }