PageRenderTime 48ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/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
  1. //----------------------------------------------------------------
  2. // Copyright (c) Microsoft Corporation. All rights reserved.
  3. //----------------------------------------------------------------
  4. namespace Microsoft.Server.Common
  5. {
  6. using System.Diagnostics;
  7. /// <remarks>
  8. /// dmetzgar (11/15/10, CSDMain 194940) - Previously, this code first checked that the opcode was set to informational. If not, it would check
  9. /// the opcode name for start, stop, suspend, or resume and use that or return Information otherwise. This does not work well with the latest
  10. /// 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
  11. /// warning or error, the level would be incorrectly reported in diagnostic tracing as informational. Also, start/stop/suspend/resume events
  12. /// have an overloaded meaning in diagnostic tracing that the svctraceviewer would misinterpret. To keep diagnostic tracing from breaking, this
  13. /// class now checks for start/stop/suspend/resume opcodes and returns the level if any of those do not match. Furthermore, any events defined
  14. /// that are shared between diagnostics and ETW should not use start/stop/suspend/resume opcodes unless explicitly intended for use in
  15. /// diagnostics tracing.
  16. /// </remarks>
  17. public static class TraceLevelHelper
  18. {
  19. static TraceEventType[] EtwLevelToTraceEventType = { TraceEventType.Critical, TraceEventType.Critical, TraceEventType.Error,
  20. TraceEventType.Warning, TraceEventType.Information, TraceEventType.Verbose
  21. };
  22. public static TraceEventType GetTraceEventType(byte level, byte opCode)
  23. {
  24. switch (opCode)
  25. {
  26. case (byte)TraceEventOpcode.Start:
  27. return TraceEventType.Start;
  28. case (byte)TraceEventOpcode.Stop:
  29. return TraceEventType.Stop;
  30. case (byte)TraceEventOpcode.Suspend:
  31. return TraceEventType.Suspend;
  32. case (byte)TraceEventOpcode.Resume:
  33. return TraceEventType.Resume;
  34. default:
  35. return EtwLevelToTraceEventType[(int)level];
  36. }
  37. }
  38. public static TraceEventType GetTraceEventType(TraceEventLevel level)
  39. {
  40. return EtwLevelToTraceEventType[(int)level];
  41. }
  42. public static TraceEventType GetTraceEventType(byte level)
  43. {
  44. return EtwLevelToTraceEventType[(int)level];
  45. }
  46. public static string LookupSeverity(TraceEventLevel level, TraceEventOpcode opCode)
  47. {
  48. string severity;
  49. switch (opCode)
  50. {
  51. case TraceEventOpcode.Start:
  52. severity = "Start";
  53. break;
  54. case TraceEventOpcode.Stop:
  55. severity = "Stop";
  56. break;
  57. case TraceEventOpcode.Suspend:
  58. severity = "Suspend";
  59. break;
  60. case TraceEventOpcode.Resume:
  61. severity = "Resume";
  62. break;
  63. default:
  64. switch (level)
  65. {
  66. case TraceEventLevel.Critical:
  67. severity = "Critical";
  68. break;
  69. case TraceEventLevel.Error:
  70. severity = "Error";
  71. break;
  72. case TraceEventLevel.Warning:
  73. severity = "Warning";
  74. break;
  75. case TraceEventLevel.Informational:
  76. severity = "Information";
  77. break;
  78. case TraceEventLevel.Verbose:
  79. severity = "Verbose";
  80. break;
  81. default:
  82. severity = level.ToString();
  83. break;
  84. }
  85. break;
  86. }
  87. return severity;
  88. }
  89. }
  90. }