/// <summary> /// Subclasses can override this method to return an /// extended/modified <see cref="JsonTraceData"/> object. /// </summary> /// <param name="traceData"></param> /// <returns></returns> protected virtual JsonTraceData ExtendOrReplaceJsonTraceData(JsonTraceData traceData) { return(traceData); }
protected string BuildJsonEventData( DateTime timestamp, string source, TraceEventType eventType, int id, object data, string callstack = null, Stack logicalOperationStack = null, int processId = 0, int threadId = 0) { var traceData = new JsonTraceData { Timestamp = timestamp, Source = source, Id = id, Type = eventType.ToString(), Host = Environment.MachineName, User = Environment.UserName, }; if (TraceOutputOptions != TraceOptions.None) { var traceOptions = Enum.GetValues(typeof(TraceOptions)).Cast <TraceOptions>(); foreach (var traceOption in traceOptions) { if (TraceOutputOptions.HasFlag(traceOption)) { switch (traceOption) { case TraceOptions.Callstack: traceData.Callstack = callstack; break; case TraceOptions.LogicalOperationStack: traceData.LogicalOperationStack = logicalOperationStack; break; case TraceOptions.ProcessId: traceData.ProcessId = processId > 0 ? processId : _processId; break; case TraceOptions.ThreadId: traceData.ThreadId = threadId > 0 ? threadId : System.Threading.Thread.CurrentThread.ManagedThreadId; break; case TraceOptions.DateTime: case TraceOptions.Timestamp: default: // NOP: not supported break; } } } } if (data != null) { traceData.Data = data; } traceData = ExtendOrReplaceJsonTraceData(traceData); var json = JsonConvert.SerializeObject(traceData, _serializerSettings); return(json); }