diff --git a/Implab/Diagnostics/Trace.cs b/Implab/Diagnostics/Trace.cs new file mode 100644 --- /dev/null +++ b/Implab/Diagnostics/Trace.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Implab.Diagnostics { + public static class Trace { + + readonly static LogChannel _channel = new LogChannel(typeof(T).Name); + + public static LogChannel Channel { + get { return _channel; } + } + + /// + /// Starts the logical operation nested to the current operation nested to the current one. + /// + [Conditional("TRACE")] + public static void StartLogicalOperation() { + TraceContext.Instance.StartLogicalOperation(); + + } + + /// + /// Starts the logical operation with the specified name, this name is usefull in logs. + /// + /// Name. + [Conditional("TRACE")] + public static void StartLogicalOperation(string name) { + TraceContext.Instance.StartLogicalOperation(name); + } + + /// + /// Ends the logical operation and restores the previous one. + /// + [Conditional("TRACE")] + public static void EndLogicalOperation() { + var op = TraceContext.Instance.EndLogicalOperation(); + LogChannel.Default.LogEvent(new TraceEvent(op, TraceEventType.OperationCompleted, String.Format("-{0} : {1}ms", op.Name, op.Duration))); + } + + /// + /// Writes an informational message. + /// + /// Format. + /// Arguments. + [Conditional("TRACE")] + public static void Log(string format, params object[] arguments) { + Channel.LogEvent(TraceEvent.Create(TraceContext.Instance.CurrentOperation, TraceEventType.Information, format, arguments)); + } + + /// + /// Writes a warning message. + /// + /// Format. + /// Arguments. + [Conditional("TRACE")] + public static void Warn(string format, params object[] arguments) { + Channel.LogEvent(TraceEvent.Create(TraceContext.Instance.CurrentOperation, TraceEventType.Warning, format, arguments)); + } + + [Conditional("TRACE")] + public static void Error(string format, params object[] arguments) { + Channel.LogEvent(TraceEvent.Create(TraceContext.Instance.CurrentOperation, TraceEventType.Error, format, arguments)); + } + + [Conditional("TRACE")] + public static void Error(Exception err) { + Error("{0}", err); + } + } +} diff --git a/Implab/Diagnostics/TraceSourceAttribute.cs b/Implab/Diagnostics/TraceSourceAttribute.cs new file mode 100644 --- /dev/null +++ b/Implab/Diagnostics/TraceSourceAttribute.cs @@ -0,0 +1,10 @@ +using System; + +namespace Implab.Diagnostics { + /// + /// Used to mark class which uses class to trace it's events + /// + [AttributeUsage(AttributeTargets.Class)] + public class TraceSourceAttribute : Attribute { + } +} diff --git a/Implab/Implab.csproj b/Implab/Implab.csproj --- a/Implab/Implab.csproj +++ b/Implab/Implab.csproj @@ -81,9 +81,11 @@ + +