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