Esempio n. 1
0
 /// <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);
 }
Esempio n. 2
0
        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);
        }