public static KissLog.Web.HttpResponse Create(HttpResponse response) { KissLog.Web.HttpResponse result = new KissLog.Web.HttpResponse(); if (response == null) { return(result); } result.HttpStatusCode = (HttpStatusCode)response.StatusCode; result.EndDateTime = DateTime.UtcNow; KissLog.Web.ResponseProperties properties = new KissLog.Web.ResponseProperties(); result.Properties = properties; foreach (string key in response.Headers.Keys) { StringValues values; response.Headers.TryGetValue(key, out values); string value = values.ToString(); properties.Headers.Add( new KeyValuePair <string, string>(key, value) ); } return(result); }
public static KissLog.Web.HttpResponse Create(HttpResponse response) { KissLog.Web.HttpResponse result = new KissLog.Web.HttpResponse(); if (response == null) { return(result); } result.HttpStatusCode = (HttpStatusCode)response.StatusCode; result.EndDateTime = DateTime.UtcNow; KissLog.Web.ResponseProperties properties = new KissLog.Web.ResponseProperties { Headers = DataParser.ToDictionary(response.Headers) }; result.Properties = properties; return(result); }
public async Task Invoke(HttpContext context) { Logger logger = Logger.Factory.Get() as Logger; if (logger == null) { return; } KissLog.Web.WebProperties webProperties = new KissLog.Web.WebProperties { Request = HttpRequestFactory.Create(context.Request) }; logger.DataContainer.WebProperties = webProperties; KissLog.Internal.NotifyListeners.NotifyBeginRequest(webProperties.Request, logger); Exception ex = null; Stream originalBodyStream = context.Response.Body; TemporaryFile responseBodyFile = null; long contentLength = 0; try { using (var responseStream = new MemoryStream()) { context.Response.Body = responseStream; await _next(context); responseBodyFile = await ReadResponseAsync(context.Response); contentLength = responseStream.Length; if (CanWriteToResponseBody(context.Response)) { await responseStream.CopyToAsync(originalBodyStream); } } } catch (Exception e) { ex = e; throw; } finally { context.Response.Body = originalBodyStream; KissLog.Web.HttpResponse response = HttpResponseFactory.Create(context.Response); webProperties.Response = response; HttpStatusCode statusCode = (HttpStatusCode)context.Response.StatusCode; if (ex != null) { statusCode = HttpStatusCode.InternalServerError; logger.Log(LogLevel.Error, ex); } if (logger.DataContainer.ExplicitHttpStatusCode.HasValue) { statusCode = logger.DataContainer.ExplicitHttpStatusCode.Value; } response.HttpStatusCode = statusCode; response.Properties.ContentLength = contentLength; if (responseBodyFile != null && InternalHelpers.PreFilterShouldLogResponseBody(logger, responseBodyFile, response.Properties)) { string responseFileName = InternalHelpers.ResponseFileName(response.Properties.Headers); logger.LogFile(responseBodyFile.FileName, responseFileName); } logger.DataContainer.WebProperties = webProperties; responseBodyFile?.Dispose(); IEnumerable <ILogger> loggers = Logger.Factory.GetAll(); Logger.NotifyListeners(loggers.ToArray()); } }