##// END OF EJS Templates
Fixed promise rejection when there is not specified error handler in the reaction....
Fixed promise rejection when there is not specified error handler in the reaction. FIXED SPELLING IN THE XML CONTAINER CONFIGURATION signleton->singleton Code cleanup Update tests make them working on dotnet core

File last commit:

r289:95896f882995 v3.0.14 v3
r295:28af686e24f7 default
Show More
SimpleTraceListener.cs
113 lines | 4.3 KiB | text/x-csharp | CSharpLexer
using System;
using System.Diagnostics;
using System.IO;
namespace Implab.Diagnostics {
public class SimpleTraceListener : TextWriterTraceListener {
public SimpleTraceListener() {
}
public SimpleTraceListener(Stream stream) : base(stream) {
}
public SimpleTraceListener(TextWriter writer) : base(writer) {
}
public SimpleTraceListener(string fileName) : base(fileName) {
}
public SimpleTraceListener(Stream stream, string name) : base(stream, name) {
}
public SimpleTraceListener(TextWriter writer, string name) : base(writer, name) {
}
public SimpleTraceListener(string fileName, string name) : base(fileName, name) {
}
public override void TraceData(TraceEventCache eventCache, string source, TraceEventType eventType, int id, object data) {
switch (id) {
case TraceEventCodes.StartLogicalOperation:
TraceEvent(eventCache, source, eventType, id, "+{0}", data);
break;
case TraceEventCodes.StopLogicalOperation:
TraceEvent(eventCache, source, eventType, id, FormatStopLogicalOperation(data));
break;
default:
TraceEvent(eventCache, source, eventType, id, data?.ToString());
break;
}
}
string FormatStopLogicalOperation(object data) {
if (data is LogicalOperation op) {
return string.Format("-{0} ({1})", op, FormatTimespan(op.Elapsed));
} else {
return data?.ToString();
}
}
string FormatTimespan(TimeSpan value) {
if (value.TotalSeconds < 10) {
return value.Milliseconds.ToString() + "ms";
} else if (value.TotalSeconds < 30) {
return string.Format("{0:0.###}s", value.TotalSeconds);
} else {
return value.ToString();
}
}
public override void TraceData(TraceEventCache eventCache, string source, TraceEventType eventType, int id, params object[] data) {
var prev = IndentLevel;
IndentLevel += eventCache.LogicalOperationStack.Count;
try {
base.TraceData(eventCache, source, eventType, id, data);
} finally {
IndentLevel = prev;
}
}
public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id) {
var prev = IndentLevel;
IndentLevel += eventCache.LogicalOperationStack.Count;
try {
base.TraceEvent(eventCache, source, eventType, id);
} finally {
IndentLevel = prev;
}
}
public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string format, params object[] args) {
TraceEvent(eventCache, source, eventType, id, String.Format(format, args));
}
public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string message) {
var prev = IndentLevel;
IndentLevel += eventCache.LogicalOperationStack.Count;
try {
LogicalOperation operation = null;
if (eventCache.LogicalOperationStack.Count > 0)
operation = eventCache.LogicalOperationStack.Peek() as LogicalOperation;
if (operation != null) {
base.TraceData(eventCache, source, eventType, id, FormatTimespan(operation.Elapsed) + ": " + message);
} else {
base.TraceData(eventCache, source, eventType, id, message);
}
} finally {
IndentLevel = prev;
}
}
public override void TraceTransfer(TraceEventCache eventCache, string source, int id, string message, Guid relatedActivityId) {
var prev = IndentLevel;
IndentLevel += eventCache.LogicalOperationStack.Count;
try {
base.TraceTransfer(eventCache, source, id, message, relatedActivityId);
} finally {
IndentLevel = prev;
}
}
}
}