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); }
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); } }