##// END OF EJS Templates
improved trace system
cin -
r52:edf0bc558596 default
parent child
Show More
@@ -116,7 +116,7 namespace Implab.Diagnostics {
116 /// </summary>
116 /// </summary>
117 /// <returns>Копия текущего контекста трассировки.</returns>
117 /// <returns>Копия текущего контекста трассировки.</returns>
118 public static TraceContext Snapshot() {
118 public static TraceContext Snapshot() {
119 return _current == null ? new TraceContext() : new TraceContext(_current);
119 return _current == null ? new TraceContext() : new TraceContext(_current,false);
120 }
120 }
121
121
122 /// <summary>
122 /// <summary>
@@ -131,7 +131,8 namespace Implab.Diagnostics {
131 try {
131 try {
132 action();
132 action();
133 } finally {
133 } finally {
134 _current.EndAllOperations();
134 if(_current != null)
135 _current.EndAllOperations();
135 _current = old;
136 _current = old;
136 }
137 }
137 }
138 }
@@ -197,6 +198,32 namespace Implab.Diagnostics {
197 }
198 }
198
199
199 /// <summary>
200 /// <summary>
201 /// Создает копию контекста и возвращается на предыдущую операцию в текущем контексте, это позволяет начать операцию в одном потоке, а завершить - в другом.
202 /// </summary>
203 /// <returns>Контекст трассировки, который можно присоединить к другому потоку.</returns>
204 public TraceContext DetachLogicalOperation() {
205 if (m_bound == m_currentOperation) {
206 return new TraceContext();
207 } else {
208 var detached = new TraceContext(this, true);
209 m_currentOperation = m_currentOperation.Parent;
210 return detached;
211 }
212 }
213
214 public void BindLogicalOperationToPromise(IPromiseBase promise) {
215 Safe.ArgumentNotNull(promise, "promise");
216
217 var ctx = DetachLogicalOperation();
218 promise.Finally(() => {
219 var old = _current;
220 TraceContext.Attach(ctx);
221 TraceContext.Current.EndLogicalOperation();
222 _current = old;
223 });
224 }
225
226 /// <summary>
200 /// Заврешает все начатые в этом контексте операции
227 /// Заврешает все начатые в этом контексте операции
201 /// </summary>
228 /// </summary>
202 public void EndAllOperations() {
229 public void EndAllOperations() {
@@ -21,7 +21,10 namespace Implab.Diagnostics {
21 }
21 }
22
22
23 public override string ToString() {
23 public override string ToString() {
24 return String.Format("{0}: {1}", EventType, Message);
24 if (EventType == TraceEventType.Information)
25 return Message;
26 else
27 return String.Format("{0}: {1}", EventType, Message);
25 }
28 }
26
29
27 public static TraceEvent Create(TraceEventType type, string format, params object[] args) {
30 public static TraceEvent Create(TraceEventType type, string format, params object[] args) {
@@ -28,6 +28,11 namespace Implab.Diagnostics {
28 }
28 }
29
29
30 [Conditional("TRACE")]
30 [Conditional("TRACE")]
31 public static void BindLogicalOperationToPromise(IPromiseBase promise) {
32 TraceContext.Current.BindLogicalOperationToPromise(promise);
33 }
34
35 [Conditional("TRACE")]
31 public static void TraceInformation(string format, params object[] arguments) {
36 public static void TraceInformation(string format, params object[] arguments) {
32 LogChannel<TraceEvent>.Default.LogEvent(TraceEvent.Create(TraceEventType.Information, format, arguments));
37 LogChannel<TraceEvent>.Default.LogEvent(TraceEvent.Create(TraceEventType.Information, format, arguments));
33 }
38 }
General Comments 0
You need to be logged in to leave comments. Login now