public async Task Invoke(HttpContext context) { try { await _next(context); if (_logger.Configuration.MinLevel == LogLevel.Trace && (context.Response.StatusCode != (int)HttpStatusCode.NotFound && context.Response.StatusCode != (int)HttpStatusCode.GatewayTimeout)) { var sb = new System.Text.StringBuilder(); sb.Append($"REQUEST:"); sb.Append($" TRACEIDENTIFIER:{context.TraceIdentifier}"); sb.Append($" - HOST:{context.Request.Host}"); sb.Append($" - HTTPS:{context.Request.IsHttps}"); sb.Append($" - PATH:{context.Request.Path}"); sb.Append($" - QUERYSTRING:{context.Request.QueryString}"); sb.Append($" - METHOD:{context.Request.Method}"); sb.Append($" - CONTENT-TYPE:{context.Request.ContentType}"); sb.Append($" - RESPONSE STATUSCODE:{context.Response.StatusCode}"); await _logger.LogTrace(message : sb.ToString()); } if (context.Response.StatusCode == (int)HttpStatusCode.NotFound || context.Response.StatusCode == (int)HttpStatusCode.GatewayTimeout) { if (_logger.Configuration.MinLevel == LogLevel.Warning) { var sb = new System.Text.StringBuilder(); sb.Append($"REQUEST:"); sb.Append($" TRACEIDENTIFIER:{context.TraceIdentifier}"); sb.Append($" - HOST:{context.Request.Host}"); sb.Append($" - HTTPS:{context.Request.IsHttps}"); sb.Append($" - PATH:{context.Request.Path}"); sb.Append($" - QUERYSTRING:{context.Request.QueryString}"); sb.Append($" - METHOD:{context.Request.Method}"); sb.Append($" - CONTENT-TYPE:{context.Request.ContentType}"); sb.Append($" - RESPONSE STATUSCODE:{context.Response.StatusCode}"); await _logger.LogWarning(message : sb.ToString()); } if (_logger.Configuration.ErrorPages?.Count() > 0) { if (_logger.Configuration.ErrorPages.Select(t => t.Key).Contains(context.Response.StatusCode)) { context.Response.Redirect(_logger.Configuration.ErrorPages.FirstOrDefault(t => t.Key == context.Response.StatusCode).Value); } } if (!string.IsNullOrWhiteSpace(_logger.Configuration.ErrorPage)) { context.Response.Redirect(_logger.Configuration.ErrorPage); } } } catch (Exception e) { var fulldata = JsonConvert.SerializeObject(e, Formatting.Indented); await _logger.LogError(e.Message, fulldata); if (_logger.Configuration.ErrorPages?.Count() > 0) { if (_logger.Configuration.ErrorPages.Select(t => t.Key).Contains(context.Response.StatusCode)) { context.Response.Redirect(_logger.Configuration.ErrorPages.FirstOrDefault(t => t.Key == context.Response.StatusCode).Value); } } if (!string.IsNullOrWhiteSpace(_logger.Configuration.ErrorPage)) { context.Response.Redirect(_logger.Configuration.ErrorPage); } } }