示例#1
0
        public void TraceLeave(string methodInfo, long startTicks, long endTicks, string[] paramNames,
                               object[] paramValues)
        {
            string returnValue = null;

            if (paramNames != null)
            {
                StringBuilder parameters = new StringBuilder();
                for (int i = 0; i < paramNames.Length; i++)
                {
                    if (paramNames[i] == "$exception")
                    {
                        var value = paramValues[i].ToString();
                        paramValues[i] = value;
                    }
                    parameters.AppendFormat("{0}={1}", paramNames[i] ?? "$return",
                                            paramValues[i] == null ? NullString : paramValues[i].ToString()
                                            .Replace("\r\n", string.Empty)
                                            .Replace("\"", string.Empty)
                                            .Replace(@"\", @"/"));
                    if (i < paramNames.Length - 1)
                    {
                        parameters.Append(", ");
                    }
                }
                returnValue = parameters.ToString();
            }

            double timeTaken = ConvertTicksToMilliseconds(endTicks - startTicks);

            string message = String.Empty;

            if (TracerContext.Tracer == null)
            {
                message = String.Format(_textReturn, methodInfo, returnValue, timeTaken);
            }
            else
            {
                message = String.Format(_textReturnWithTracer, methodInfo, returnValue, timeTaken, TracerContext.Tracer.TracerId, TracerContext.Tracer.SpanId);
            }

            Log.Info(message);
            TracerContext.Leave();
        }