private void AddTrackingRecord(InfoOfActivity info) { if (TrackingSource == null || info == null) { return; } TrackingSource.Activities.Add(info); if (MaxCount > 0) { while (TrackingSource.Activities.Count > MaxCount) { TrackingSource.Activities.RemoveAt(0); } } }
private string GetActivitiesStack(ActivityContext context) { if (!IsActivitiesStackIncluded.Get(context)) { return(null); } var ext = ActivityHelpers.GetTraceExtension(context); if (ext == null || ext.NotUseActivityStackTrace) { return(null); } var activityStackTrace = ext.Get <ActivityStackTrace>(TraceExtension.ActivityTrackingSourcePropertyName); if (activityStackTrace == null) { return(null); } const string format = " {0} {1}"; const string instr = "in"; const string errorstr = "error " + instr; var ast = new StringBuilder(); var isFaultSource = activityStackTrace.FaultSource == null; var isFaultHandler = activityStackTrace.FaultHandler == null; //Добавляем в stack текущую activity var carrentActivityInfo = new InfoOfActivity(name: DisplayName, id: Id, instanceId: context.ActivityInstanceId, typeName: GetType().FullName); if (activityStackTrace.Activities.All(a => a.CompareTo(carrentActivityInfo) != 0)) { ast.AppendLine(string.Format(format, instr, carrentActivityInfo)); } var count = activityStackTrace.Activities.Count; for (var i = count - 1; i >= 0; i--) { var a = activityStackTrace.Activities[i]; if (!isFaultSource && activityStackTrace.FaultSource.CompareTo(a) == 0) { isFaultSource = true; ast.AppendLine(string.Format(format, errorstr, a)); continue; } if (!isFaultHandler && activityStackTrace.FaultHandler.CompareTo(a) == 0) { isFaultHandler = true; } ast.AppendLine(string.Format(format, instr, a)); } if (!isFaultSource) { ast.AppendLine(string.Format(format, "? -> " + errorstr, activityStackTrace.FaultSource)); } if (!isFaultHandler) { if (count > 0) { ast.AppendLine(string.Format(format, "...", null)); } ast.AppendLine(string.Format(format, instr, activityStackTrace.FaultHandler)); } if (ast.Length > 0) { ast.Append("--- End of stack trace activities ---"); } var result = ast.ToString(); //Чистим ошибку activityStackTrace.ClearFault(); return(result); }