Esempio n. 1
0
        protected virtual void HttpResponseHandle(HttpResponseMessage response)
        {
            var activity1 = System.Diagnostics.Activity.Current;

            activity1?.AddTag("4", "4");
            activity1?.AddBaggage("4", "4");
            if (Options.RequestRule.Invoke(ServiceProvider, HttpContextAccessor?.HttpContext?.Request))
            {
                string serviceName = null;
                if (response.RequestMessage.Headers.TryGetValues(HttpConstant.TRACEMICROSERVICE, out IEnumerable <string> serviceNames))
                {
                    serviceName = serviceNames?.FirstOrDefault();
                }

                if (HttpContextAccessor.HttpContext != null && HttpContextAccessor.HttpContext.Items.ContainsKey(DiagnosticConstant.GetItemKey(typeof(TraceInfoBuilder).FullName)))
                {
                    var parentTraceInfoBuilder = HttpContextAccessor.HttpContext.Items[DiagnosticConstant.GetItemKey(typeof(TraceInfoBuilder).FullName)] as TraceInfoBuilder;
                    if (parentTraceInfoBuilder != null)
                    {
                        var parentTraceInfo  = parentTraceInfoBuilder.Build();
                        var traceInfoBuilder = TraceInfoBuilder.CreateBuilder().BuildFromTraceInfo(parentTraceInfo).ParentId(parentTraceInfo.Id).HttpRequestMessage(response.RequestMessage)
                                               .HttpResponseMessage(response).ElapsedTime(HttpContextAccessor.HttpContext.ElapsedTime()).TargetServerName(serviceName).Log(LogLevel.Trace);

                        Logger.LogInformation(traceInfoBuilder);
                    }
                }
            }
        }
        public void Log(LogLevel logLevel, TraceInfoBuilder logbuilder, Exception exception = null)
        {
            var traceInfo = logbuilder.Build();

            if (string.IsNullOrEmpty(traceInfo.LogLevel))
            {
                traceInfo.LogLevel = logLevel.ToString();
            }
            if (string.IsNullOrEmpty(traceInfo.LogName))
            {
                traceInfo.LogName = typeof(T).FullName;
            }
            if (traceInfo.StackTrace == null)
            {
                traceInfo.StackTrace = exception?.StackTrace;
            }
            if (string.IsNullOrEmpty(traceInfo.ErrorMessage))
            {
                traceInfo.ErrorMessage = exception?.Message;
            }
            if (string.IsNullOrEmpty(traceInfo.Description))
            {
                traceInfo.Description = $"请求url:{traceInfo?.Request?.Url}";
            }
            if (string.IsNullOrEmpty(traceInfo.ServerName))
            {
                traceInfo.ServerName = AppDomain.CurrentDomain.FriendlyName;
            }
            _logger.Log(logLevel, DiagnosticConstant.EVENT_ID, traceInfo, exception, (loglevel, ex) => "");
        }
        public void Log <TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func <TState, Exception, string> formatter)
        {
            if (!IsEnabled(logLevel))
            {
                return;
            }
            TraceInfo traceInfo = null;

            if (eventId == DiagnosticConstant.EVENT_ID)
            {
                if (state is string)
                {
                    var str = state as string;
                    traceInfo = str.ToObj <TraceInfo>();
                }
                else if (state is TraceInfo)
                {
                    traceInfo = state as TraceInfo;
                }
                else if (state is TraceInfoBuilder)
                {
                    var builder = state as TraceInfoBuilder;
                    traceInfo = builder?.Build();
                }
            }
            else
            {
                if (_httpContextAccessor.HttpContext != null && _httpContextAccessor.HttpContext.Items.ContainsKey(DiagnosticConstant.GetItemKey(typeof(TraceInfoBuilder).FullName)))
                {
                    var parentTraceInfoBuilder = _httpContextAccessor.HttpContext.Items[DiagnosticConstant.GetItemKey(typeof(TraceInfoBuilder).FullName)] as TraceInfoBuilder;
                    if (parentTraceInfoBuilder != null)
                    {
                        var parentTraceInfo  = parentTraceInfoBuilder.Build();
                        var traceInfoBuilder = TraceInfoBuilder.CreateBuilder().BuildTraceInfo(Guid.NewGuid().ToString()).ParentId(parentTraceInfo.Id)
                                               .TrackId(parentTraceInfo.TrackId).ParentTrackId(parentTraceInfo.ParentTrackId)
                                               .Log(logLevel, _categoryName, exception).Description(state?.ToString());
                        traceInfo = traceInfoBuilder.Build();
                    }
                }
            }
            //通过异步发送TraceInfo
            if (traceInfo != null)
            {
                try
                {
                    var buffer = Encoding.UTF8.GetBytes(traceInfo.ToJson());
                    var model  = _rabbitmqChannelManagement.GetChannel(TraceLogRabbitmqConsumer.NAME);
                    model.BasicPublish("", TraceLogRabbitmqConsumer.NAME, null, buffer);
                }
                catch
                {
                }
            }
        }
        private TraceInfoBuilder createErrorLogBuilder(HttpContext httpContext)
        {
            var builder = httpContext.Items[DiagnosticConstant.GetItemKey(typeof(TraceInfoBuilder).FullName)];

            if (builder != null && builder is TraceInfoBuilder traceInfoBuilder)
            {
                var elapsedTime         = httpContext.ElapsedTime();
                var traceInfo           = traceInfoBuilder.Build();
                var traceInfoBuilderNew = TraceInfoBuilder.CreateBuilder().BuildFromTraceInfo(traceInfo).ParentId(traceInfo.Id)
                                          .HttpContext(httpContext).ElapsedTime(elapsedTime);
                return(traceInfoBuilderNew);
            }
            return(null);
        }
Esempio n. 5
0
 protected virtual void HttpExceptionHandle(HttpRequestMessage request, Exception exception)
 {
     if (Options.RequestRule.Invoke(ServiceProvider, HttpContextAccessor?.HttpContext?.Request))
     {
         if (HttpContextAccessor.HttpContext != null && HttpContextAccessor.HttpContext.Items.ContainsKey(DiagnosticConstant.GetItemKey(typeof(TraceInfoBuilder).FullName)))
         {
             var parentTraceInfoBuilder = HttpContextAccessor.HttpContext.Items[DiagnosticConstant.GetItemKey(typeof(TraceInfoBuilder).FullName)] as TraceInfoBuilder;
             if (parentTraceInfoBuilder != null)
             {
                 var parentTraceInfo  = parentTraceInfoBuilder.Build();
                 var traceInfoBuilder = TraceInfoBuilder.CreateBuilder().BuildFromTraceInfo(parentTraceInfo).ParentId(parentTraceInfo.Id).HttpRequestMessage(request)
                                        .ElapsedTime(HttpContextAccessor.HttpContext.ElapsedTime()).Exception(exception).Log(LogLevel.Trace);
                 Logger.LogInformation(traceInfoBuilder);
             }
         }
     }
 }
        protected virtual void BeginRequestHandle(HttpContext httpContext)
        {
            if (Options.RequestRule.Invoke(ServiceProvider, httpContext.Request))
            {
                var request = httpContext.Request;
                //上一个服务传过来 是父级的跟踪Id
                var parentTrackId = request.Headers[HttpConstant.TRACK_ID].FirstOrDefault();
                if (!string.IsNullOrWhiteSpace(parentTrackId))
                {
                    request.Headers.Add(HttpConstant.PARENT_TRACK_ID, parentTrackId);
                }
                var trackId = Guid.NewGuid().ToString();
                request.Headers.Add(HttpConstant.TRACK_ID, trackId);

                //当前服务追踪的Id
                var chainId = Guid.NewGuid().ToString();
                request.Headers.Add(HttpConstant.CHAIN_ID, chainId);
                Stopwatch stopwatch = new Stopwatch();
                stopwatch.Start();
                httpContext.Items.Add(DiagnosticConstant.GetItemKey(HttpConstant.TRACK_TIME), stopwatch);
                var traceInfoBuilder = TraceInfoBuilder.CreateBuilder().BuildTraceInfo(chainId).TrackId(trackId, parentTrackId).HttpContext(httpContext);
                httpContext.Items.Add(DiagnosticConstant.GetItemKey(typeof(TraceInfoBuilder).FullName), traceInfoBuilder);
            }
        }
 public void LogCritical(TraceInfoBuilder logbuilder, Exception exception = null)
 {
     Log(LogLevel.Critical, logbuilder, exception);
 }
 public void LogError(TraceInfoBuilder logbuilder, Exception exception = null)
 {
     Log(LogLevel.Error, logbuilder, exception);
 }
 public void LogWarning(TraceInfoBuilder logbuilder, Exception exception = null)
 {
     Log(LogLevel.Warning, logbuilder, exception);
 }
 public void LogInformation(TraceInfoBuilder logbuilder, Exception exception = null)
 {
     Log(LogLevel.Information, logbuilder, exception);
 }
 public void LogDebug(TraceInfoBuilder logbuilder, Exception exception = null)
 {
     Log(LogLevel.Debug, logbuilder, exception);
 }
 public void LogTrace(TraceInfoBuilder logbuilder, Exception exception = null)
 {
     Log(LogLevel.Trace, logbuilder, exception);
 }
 private void setLogResponse(IActionResult actionResult, TraceInfoBuilder traceInfoBuilder)
 {
     if (actionResult is AntiforgeryValidationFailedResult antiforgeryValidationFailedResult)
     {
         traceInfoBuilder.Response(antiforgeryValidationFailedResult?.ToJson()).StatusCode(antiforgeryValidationFailedResult.StatusCode);
     }
     else if (actionResult is ContentResult contentResult)
     {
         traceInfoBuilder.Response(contentResult?.Content).StatusCode(contentResult.StatusCode ?? 200);
     }
     else if (actionResult is JsonResult jsonResult)
     {
         traceInfoBuilder.Response(jsonResult?.Value?.ToJson()).StatusCode(jsonResult.StatusCode ?? 200);
     }
     else if (actionResult is ObjectResult objectResult)
     {
         traceInfoBuilder.Response(objectResult?.Value?.ToJson()).StatusCode(objectResult.StatusCode ?? 200);
     }
     else if (actionResult is PartialViewResult partialViewResult)
     {
         traceInfoBuilder.Response(partialViewResult?.ToJson()).StatusCode(partialViewResult.StatusCode ?? 200);
     }
     else if (actionResult is RedirectResult redirectResult)
     {
         traceInfoBuilder.Response(redirectResult?.ToJson()).StatusCode((int)HttpStatusCode.Redirect);
     }
     else if (actionResult is RedirectToActionResult redirectToActionResult)
     {
         traceInfoBuilder.Response(redirectToActionResult?.ToJson()).StatusCode((int)HttpStatusCode.RedirectMethod);
     }
     else if (actionResult is RedirectToPageResult redirectToPageResult)
     {
         traceInfoBuilder.Response(redirectToPageResult?.ToJson()).StatusCode((int)HttpStatusCode.Redirect);
     }
     else if (actionResult is RedirectToRouteResult redirectToRouteResult)
     {
         traceInfoBuilder.Response(redirectToRouteResult?.ToJson()).StatusCode((int)HttpStatusCode.RedirectMethod);
     }
     else if (actionResult is StatusCodeResult statusCodeResult)
     {
         traceInfoBuilder.Response(statusCodeResult?.ToJson()).StatusCode(statusCodeResult.StatusCode);
     }
     else if (actionResult is ViewComponentResult viewComponentResult)
     {
         traceInfoBuilder.Response(viewComponentResult?.ToJson()).StatusCode(viewComponentResult.StatusCode ?? 200);
     }
     else if (actionResult is ViewResult viewResult)
     {
         traceInfoBuilder.Response(viewResult?.ToJson()).StatusCode(viewResult.StatusCode ?? 200);
     }
     else
     {
         var property   = actionResult.GetType().GetProperty(HttpConstant.StatusCode);
         int statuscode = 200;
         if (property != null)
         {
             var code = property.GetValue(actionResult);
             if (code != null)
             {
                 if (int.TryParse(code.ToString(), out statuscode))
                 {
                     traceInfoBuilder.StatusCode(statuscode);
                 }
             }
         }
         traceInfoBuilder.Response(actionResult?.ToJson()).StatusCode(statuscode);
     }
 }