private void Context_EndRequest(object sender, EventArgs e)
        {
            if (((HttpApplication)sender).Context.Request.CurrentExecutionFilePathExtension.ToLower() == ".axd")
            {
                return;
            }

            var httpHandler = HttpContext.Current.Handler as HttpHandler;

            if (httpHandler != null)
            {
                // set the original handler back
                HttpContext.Current.Handler = httpHandler.OriginalHandler;
            }

            LogEvent(sender, e, "Context_EndRequest", watcher);

            //TODO Look into this dynamic assembly.. it works, but is not in use atm
            //var weee = DynamicAssembly.LoadAssemblyInstances<ILogRecorderAndPlayer>("DynAssembly.dll").FirstOrDefault();
            //var ost = weee.DoStuff(6, 10);

            //var ccc = ConfigurationHelper.GetConfigurationSection();

            string response = watcher.ToString();

            this.context.Response.Filter = null;

            HttpApplication application   = (HttpApplication)sender;
            HttpContext     context       = application.Context;
            string          filePath      = context.Request.FilePath;
            string          fileExtension = VirtualPathUtility.GetExtension(filePath);


            //if (filePath.ToLower() == "/logrecorderandplayer.aspx")
            //{
            //    context.Response.Clear();
            //    context.Response.Write(ResourceHelper.GetResourceContent("LogRecorderAndPlayer.JS.LogRecorderAndPlayer.js"));

            //    context.Response.Status = "200 OK";
            //    context.Response.StatusCode = 200;
            //    context.Response.StatusDescription = "OK";
            //}

            //if (filePath.ToLower() == "/logrecorderandplayerjs.aspx")
            //{
            //    context.Response.Clear();
            //    context.Response.Write(ResourceHelper.GetResourceContent("LogRecorderAndPlayer.JS.LogRecorderAndPlayer.js"));
            //    //context.Response.Status = "200 OK";
            //    //context.Response.StatusCode = 200;
            //    //context.Response.StatusDescription = "OK";
            //    return;
            //}
        }
        private string BuildLogText(string name, HttpContext context, Page page, IHttpHandler handler, StreamWatcher watcher)
        {
            var sb = new StringBuilder();

            try
            {
                sb.AppendLine($"context: {context != null}");
                if (context != null)
                {
                    sb.AppendLine($"context.Session: {context.Session != null}");
                    if (context.Session != null)
                    {
                        sb.AppendLine($"context.Session[\"HttpModuleTest\"]: {(context.Session["HttpModuleTest"] ?? "null")}");
                        var value = $"{name}{DateTime.Now.ToString("HH:mm:ss:fff")}";
                        sb.AppendLine($"Setting context.Session[\"{value}\"] = \"{value}\"");
                        context.Session[value] = value;
                        sb.AppendLine($"Done setting context.Session[\"{value}\"] = \"{value}\"");
                    }
                }
            }
            catch (Exception ex)
            {
                sb.AppendLine($"context: Error");
                sb.AppendLine(ex.Message);
                sb.AppendLine(ex.StackTrace);
            }
            sb.AppendLine($"page: {page != null}");
            try
            {
                if (page != null && page.IsValid)
                {
                    try
                    {
                        sb.AppendLine($"page.Session: {page.Session != null}");
                        if (page.Session != null)
                        {
                            sb.AppendLine($"page.Session[\"HttpModuleTest\"]: {(page.Session["HttpModuleTest"] ?? "null")}");
                            var value = $"{name}{DateTime.Now.ToString("HH:mm:ss:fff")}";
                            sb.AppendLine($"Setting page.Session[\"{value}\"] = \"{value}\"");
                            page.Session[value] = value;
                            sb.AppendLine($"Done setting page.Session[\"{value}\"] = \"{value}\"");
                        }
                    }
                    catch (Exception ex)
                    {
                        sb.AppendLine($"Page-Session: Error");
                        sb.AppendLine(ex.Message);
                        sb.AppendLine(ex.StackTrace);
                    }
                }
            }
            catch (Exception ex2)
            {
                sb.AppendLine("Page: Error");
                sb.AppendLine(ex2.Message);
                sb.AppendLine(ex2.StackTrace);
            }

            if (page != null)
            {
                SetupPageEvent(page, "InitComplete");
                SetupPageEvent(page, "LoadComplete");
                SetupPageEvent(page, "PreInit");
                SetupPageEvent(page, "PreLoad");
                SetupPageEvent(page, "PreRenderComplete");
                SetupPageEvent(page, "SaveStateComplete");
                SetupPageEvent(page, "DataBinding");
                SetupPageEvent(page, "Disposed");
                SetupPageEvent(page, "Init");
                SetupPageEvent(page, "Load");
                SetupPageEvent(page, "PreRender");
                SetupPageEvent(page, "Unload");
                SetupPageEvent(page, "AbortTransaction");
                SetupPageEvent(page, "CommitTransaction");
                SetupPageEvent(page, "Error");
            }
            if (page != null)
            {
                sb.Append(TestViewState(page, name));
            }

            sb.AppendLine($"handler: {handler != null}");

            if (watcher != null)
            {
                try
                {
                    sb.AppendLine($"watcher.response.length = {watcher.ToString().Trim().Length}");
                }
                catch (Exception ex)
                {
                    sb.AppendLine($"watcher: Error");
                    sb.AppendLine(ex.Message);
                    sb.AppendLine(ex.StackTrace);
                }
            }

            return(sb.ToString());
        }