private async Task SaveTraceAsync(LogsDatabaseContext context, HttpEntry entry) { try { var trace = new Entities.Trace { Id = Guid.NewGuid(), CallDuration = entry.CallDuration, CallerIdentity = entry.CallerIdentity ?? "(anonymous)", ReasonPhrase = entry.ReasonPhrase, RequestHeaders = ProcessHeaders(entry.RequestHeaders), ResponseHeaders = ProcessHeaders(entry.ResponseHeaders), RequestPayload = entry.Request, RequestTimestamp = entry.CallDateTime, ResponsePayload = entry.Response, StatusCode = entry.StatusCode, Url = entry.RequestUri.AbsolutePath, Verb = entry.Verb }; context.Traces.Add(trace); await context.SaveChangesAsync(); } catch { } }
/// <summary> /// Set response headers /// </summary> /// <param name="response"></param> /// <param name="record"></param> private void SetEventResponseHeaders(IOwinResponse response, HttpEntry record) { record.StatusCode = response.StatusCode; record.ReasonPhrase = response.ReasonPhrase; IDictionary <string, string[]> headers = new Dictionary <string, string[]>(); foreach (var headerKey in response.Headers.Keys) { if (_options.RequestHeaderCaptureExceptions.Contains(headerKey)) { continue; } string headerValue = response.Headers[headerKey]; headers.Add(headerKey, new[] { headerValue }); } record.ResponseHeaders = new HeaderDictionary(headers); }
/// <summary> /// Set request headers from http request /// </summary> /// <param name="request"></param> /// <param name="record"></param> private void SetEventRequestHeaders(HttpRequest request, HttpEntry record) { record.Verb = request.HttpMethod; record.RequestUri = request.Url; IDictionary <string, string[]> headers = new Dictionary <string, string[]>(); foreach (var headerKey in request.Headers.AllKeys) { if (_options.RequestHeaderCaptureExceptions.Contains(headerKey)) { continue; } string headerValue = request.Headers[headerKey]; headers.Add(headerKey, new[] { headerValue }); } record.RequestHeaders = new HeaderDictionary(headers); }