Mercurial > pub > ImplabNet
comparison Implab/Diagnostics/Trace.cs @ 255:b00441e04738 v3
Adde workaround to the behaviour of the logical operations stack in conjuction
with async/await methods
author | cin |
---|---|
date | Wed, 04 Apr 2018 15:38:48 +0300 |
parents | 34df34841225 |
children | f07be402ab02 |
comparison
equal
deleted
inserted
replaced
254:12c00235b105 | 255:b00441e04738 |
---|---|
1 using System; | 1 using System; |
2 using System.Collections.Generic; | 2 using System.Collections.Generic; |
3 using System.Diagnostics; | 3 using System.Diagnostics; |
4 using System.Linq; | 4 using System.Linq; |
5 using System.Text; | 5 using System.Text; |
6 using System.Threading; | |
6 using System.Threading.Tasks; | 7 using System.Threading.Tasks; |
7 | 8 |
8 namespace Implab.Diagnostics { | 9 namespace Implab.Diagnostics { |
9 public static class Trace<T> { | 10 public static class Trace<T> { |
10 | 11 |
11 readonly static TraceSource _traceSource = new TraceSource(typeof(T).Name); | 12 public static TraceSource TraceSource { get; } = new TraceSource(typeof(T).Name); |
12 | 13 |
13 public static TraceSource TraceSource { | 14 #if NETFX_TRACE_BUG |
14 get { return _traceSource; } | 15 readonly static AsyncLocal<object> m_currentOperation = new AsyncLocal<object>(); |
15 } | 16 #endif |
16 | 17 |
17 /// <summary> | 18 /// <summary> |
18 /// Starts the logical operation nested to the current operation nested to the current one. | 19 /// Starts the logical operation nested to the current operation nested to the current one. |
19 /// </summary> | 20 /// </summary> |
20 [Conditional("TRACE")] | |
21 public static void StartLogicalOperation() { | 21 public static void StartLogicalOperation() { |
22 Trace.CorrelationManager.StartLogicalOperation(); | 22 Trace.CorrelationManager.StartLogicalOperation(); |
23 | 23 |
24 } | 24 } |
25 | 25 |
26 /// <summary> | 26 /// <summary> |
27 /// Starts the logical operation with the specified name, this name is usefull in logs. | 27 /// Starts the logical operation with the specified name, this name is usefull in logs. |
28 /// </summary> | 28 /// </summary> |
29 /// <param name="name">Name.</param> | 29 /// <param name="name">Name.</param> |
30 [Conditional("TRACE")] | 30 #if NETFX_TRACE_BUG |
31 public static void StartLogicalOperation(string name) { | 31 public static void StartLogicalOperation(object name) { |
32 m_currentOperation.Value = name; | |
32 Trace.CorrelationManager.StartLogicalOperation(name); | 33 Trace.CorrelationManager.StartLogicalOperation(name); |
33 } | 34 } |
35 #else | |
36 public static void StartLogicalOperation(object name) { | |
37 Trace.CorrelationManager.StartLogicalOperation(name); | |
38 } | |
39 #endif | |
34 | 40 |
35 /// <summary> | 41 /// <summary> |
36 /// Ends the logical operation and restores the previous one. | 42 /// Ends the logical operation and restores the previous one. |
37 /// </summary> | 43 /// </summary> |
38 [Conditional("TRACE")] | |
39 public static void StopLogicalOperation() { | 44 public static void StopLogicalOperation() { |
40 Trace.CorrelationManager.StopLogicalOperation(); | 45 Trace.CorrelationManager.StopLogicalOperation(); |
41 } | 46 } |
42 | 47 |
43 /// <summary> | 48 /// <summary> |
118 /// <returns>Logical operation scope, disposing it will stop | 123 /// <returns>Logical operation scope, disposing it will stop |
119 /// logical operation and notify trace listeners.</returns> | 124 /// logical operation and notify trace listeners.</returns> |
120 public static LogicalOperationScope LogicalOperation(string name) { | 125 public static LogicalOperationScope LogicalOperation(string name) { |
121 var operation = new LogicalOperation(name); | 126 var operation = new LogicalOperation(name); |
122 TraceSource.TraceData(TraceEventType.Information, TraceEventCodes.StartLogicalOperation, operation); | 127 TraceSource.TraceData(TraceEventType.Information, TraceEventCodes.StartLogicalOperation, operation); |
123 Trace.CorrelationManager.StartLogicalOperation(operation); | 128 StartLogicalOperation(operation); |
124 return new LogicalOperationScope(TraceSource, operation); | 129 return new LogicalOperationScope(TraceSource, operation); |
125 } | 130 } |
126 } | 131 } |
127 } | 132 } |