/// <summary> /// Converts the API trace log. /// </summary> /// <param name="apiTraceLog">The API trace log.</param> /// <returns>ApiTraceLog.</returns> private static ApiTraceLog ConvertApiTraceLog(RuntimeApiTraceLog apiTraceLog) { if (apiTraceLog != null) { var result = new ApiTraceLog { EntryStamp = apiTraceLog.EntryStamp, Exception = apiTraceLog.Exception, ExitStamp = apiTraceLog.ExitStamp, MethodFullName = apiTraceLog.MethodFullName, TraceId = TraceId, MethodParameters = apiTraceLog.MethodParameters }; foreach (var one in apiTraceLog.Children) { result.InnerTraces.Add(ConvertApiTraceLogPiece(one)); } return result; } return null; }
/// <summary> /// Initializes the specified trace identifier. /// </summary> /// <param name="traceId">The trace identifier.</param> /// <param name="traceSequence">The trace sequence.</param> /// <param name="entryStamp">The entry stamp.</param> /// <param name="methodName">Name of the method.</param> public static void Initialize(string traceId, int? traceSequence, DateTime? entryStamp = null, [CallerMemberName] string methodName = null) { if (!string.IsNullOrWhiteSpace(traceId)) { _root = new ApiTraceLog(entryStamp: entryStamp) { TraceId = traceId, TraceSequence = traceSequence.HasValue ? (traceSequence.Value + 1) : 0 }; var current = new ApiTraceLogPiece(_root, methodName, entryStamp); _root.InnerTraces.Add(current); _current = current; } }
/// <summary> /// Disposes this instance. /// </summary> public static void Dispose() { _current = null; _root = null; }
/// <summary> /// APIs the trace log to string. /// </summary> /// <param name="log">The log.</param> /// <param name="level">The level.</param> /// <returns>System.String.</returns> private static string ApiTraceLogToString(ApiTraceLog log, int level) { StringBuilder builder = new StringBuilder(); if (log != null) { builder.AppendIndent(' ', 2 * (level + 1)); builder.AppendLineWithFormat("Trace ID: {0}", log.TraceId); builder.AppendIndent(' ', 2 * (level + 1)); builder.AppendLineWithFormat("Entry: {0}", log.EntryStamp.ToFullDateTimeString()); builder.AppendIndent(' ', 2 * (level + 1)); builder.AppendLineWithFormat("Exit: {0}", log.ExitStamp.ToFullDateTimeString()); builder.AppendIndent(' ', 2 * (level + 1)); builder.AppendLineWithFormat("Parameters: {0}", log.MethodParameters.ToJson()); builder.AppendIndent(' ', 2 * (level + 1)); builder.AppendLineWithFormat("Exception: {0}", log.Exception == null ? "NA" : log.Exception.ToJson()); builder.AppendIndent(' ', 2 * (level + 1)); foreach (var one in log.InnerTraces) { builder.AppendLineWithFormat("Inner trace: {0}", ApiTraceLogToString(one, level + 1)); } } return builder.ToString(); }