/// <summary>
        /// Constructor
        /// </summary>
        /// <param name="context">Current HttpContext from which to extract properties</param>
        /// <param name="flags">Determins which class of properties should be extracted</param>
        public LogHttpContext(HttpContext context, HttpCaptureFlags flags)
        {
            if (context == null) return;
            var request = context.Request;
            if (request == null)
            {

                return;
            }

            extractContextVariables(context,request,flags);
        }
        private void extractContextVariables(HttpContext context, HttpRequest request, HttpCaptureFlags flags)
        {
            if ((flags & HttpCaptureFlags.ServerVariables) == HttpCaptureFlags.ServerVariables)
            {
                for(int x=0;x<request.ServerVariables.Count;x++)
                {

                    var k = request.ServerVariables.AllKeys[x];
                    var v = request.ServerVariables[k];
                    if (string.IsNullOrEmpty(v)) continue;
                    if (string.Compare("AUTH_PASSWORD",k,true )==0 && string.IsNullOrWhiteSpace(v))
                    {
                        v = "****";
                    }
                    this.ServerVariables.Add(k,v);
                }
            }

            if ((flags & HttpCaptureFlags.QueryString) == HttpCaptureFlags.QueryString)
            {
                for (int x = 0; x < request.QueryString.Count; x++)
                {

                    var k = request.QueryString.AllKeys[x];
                    var v = request.QueryString[k];

                    this.QueryString.Add(k, v);
                }
            }

            if ((flags & HttpCaptureFlags.Cookies) == HttpCaptureFlags.Cookies)
            {
                for (int x = 0; x < request.Cookies.Count; x++)
                {

                    var k = request.Cookies.AllKeys[x];
                    var v = request.Cookies[k].Value;

                    this.Cookies.Add(k, v);
                }
            }
            if ((flags & HttpCaptureFlags.Form) == HttpCaptureFlags.Form)
            {
                for (int x = 0; x < request.Form.Count; x++)
                {

                    var k = request.Form.AllKeys[x];
                    var v = request.Form[k];

                    this.Form.Add(k, v);
                }
            }

            if ((flags & HttpCaptureFlags.Headers) == HttpCaptureFlags.Headers)
            {
                for (int x = 0; x < request.Headers.Count; x++)
                {

                    var k = request.Headers.AllKeys[x];
                    var v = request.Headers[k];

                    this.Headers.Add(k, v);
                }
            }
        }
 /// <summary>
 /// Extract specific HTTP information and store it in message's HttpContext collection.
 /// WARNING: This is an extemely heavy operation and should only be done in extreme cases (e.g. logging exceptions)
 /// </summary>
 /// <param name="flags">Determines which information to collect from context</param>
 /// <returns></returns>
 public IEventBuilder CaptureHttp(HttpCaptureFlags flags)
 {
     httpContext = new LogHttpContext(HttpContext.Current, flags);
     return this;
 }