示例#1
0
        private void LogResponse(Logger logger, KissLog.Web.HttpResponse response, ResponseSniffer sniffer)
        {
            try
            {
                using (sniffer.MirrorStream)
                {
                    sniffer.MirrorStream.Position = 0;

                    if (InternalHelpers.PreFilterShouldLogResponseBody(logger, sniffer.MirrorStream, response.Properties))
                    {
                        using (TemporaryFile tempFile = new TemporaryFile())
                        {
                            using (var fs = File.OpenWrite(tempFile.FileName))
                            {
                                sniffer.MirrorStream.CopyTo(fs);
                            }

                            string responseFileName = InternalHelpers.ResponseFileName(response.Properties.Headers);
                            logger.LogFile(tempFile.FileName, responseFileName);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                StringBuilder sb = new StringBuilder();
                sb.AppendLine("Error logging HTTP Response Content as file");
                sb.AppendLine(ex.ToString());

                KissLog.Internal.InternalHelpers.Log(sb.ToString(), LogLevel.Error);
            }
        }
示例#2
0
        public static WebRequestProperties Create(HttpRequest request)
        {
            WebRequestProperties result = new WebRequestProperties();

            if (request == null)
            {
                return(result);
            }

            result.StartDateTime = DateTime.UtcNow;
            result.UserAgent     = request.UserAgent;
            result.Url           = request.Url;
            result.HttpMethod    = request.HttpMethod;
            result.HttpReferer   = request.UrlReferrer?.AbsolutePath;
            result.RemoteAddress = request.UserHostAddress;
            result.MachineName   = GetMachineName(request);

            RequestProperties requestProperties = new RequestProperties();

            result.Request = requestProperties;

            var headers = DataParser.ToDictionary(request.Unvalidated.Headers);

            headers = FilterHeaders(headers);

            var queryString     = DataParser.ToDictionary(request.Unvalidated.QueryString);
            var formData        = DataParser.ToDictionary(request.Unvalidated.Form);
            var serverVariables = DataParser.ToDictionary(request.ServerVariables);

            serverVariables = FilterServerVariables(serverVariables);

            var cookies = DataParser.ToDictionary(request.Unvalidated.Cookies);

            requestProperties.Headers         = headers;
            requestProperties.QueryString     = queryString;
            requestProperties.FormData        = formData;
            requestProperties.ServerVariables = serverVariables;
            requestProperties.Cookies         = cookies;
            string inputStream = null;

            if (InternalHelpers.ShouldLogInputStream(headers))
            {
                inputStream = ReadInputStream(request);
            }

            requestProperties.InputStream = inputStream;

            return(result);
        }
        public static HttpRequest Create(System.Web.HttpRequestBase httpRequest)
        {
            if (httpRequest == null)
            {
                throw new ArgumentNullException(nameof(httpRequest));
            }

            HttpRequest result = new HttpRequest(new HttpRequest.CreateOptions
            {
                Url           = httpRequest.Url,
                HttpMethod    = httpRequest.HttpMethod,
                UserAgent     = httpRequest.UserAgent,
                HttpReferer   = httpRequest.UrlReferrer?.ToString(),
                RemoteAddress = httpRequest.UserHostAddress,
                MachineName   = InternalHelpers.GetMachineName(httpRequest)
            });

            RequestProperties.CreateOptions propertiesOptions = new RequestProperties.CreateOptions();

            propertiesOptions.ServerVariables = InternalHelpers.ToKeyValuePair(httpRequest.ServerVariables);

            if (httpRequest.Unvalidated != null)
            {
                propertiesOptions.Headers     = InternalHelpers.ToKeyValuePair(httpRequest.Unvalidated.Headers);
                propertiesOptions.Cookies     = InternalHelpers.ToKeyValuePair(httpRequest.Unvalidated.Cookies);
                propertiesOptions.QueryString = InternalHelpers.ToKeyValuePair(httpRequest.Unvalidated.QueryString);

                if (KissLogConfiguration.Options.Handlers.ShouldLogFormData.Invoke(result) == true)
                {
                    propertiesOptions.FormData = InternalHelpers.ToKeyValuePair(httpRequest.Unvalidated.Form);
                }
            }

            if (KissLog.InternalHelpers.CanReadRequestInputStream(propertiesOptions.Headers))
            {
                if (KissLogConfiguration.Options.Handlers.ShouldLogInputStream.Invoke(result) == true)
                {
                    propertiesOptions.InputStream = KissLog.InternalHelpers.WrapInTryCatch(() =>
                    {
                        return(InternalHelpers.ReadInputStream(httpRequest));
                    });
                }
            }

            result.SetProperties(new RequestProperties(propertiesOptions));

            return(result);
        }
示例#4
0
        internal void OnPostAuthenticateRquest(HttpContextBase httpContext)
        {
            if (httpContext == null)
            {
                throw new ArgumentNullException(nameof(httpContext));
            }

            var    factory = new LoggerFactory();
            Logger logger  = factory.GetInstance(httpContext);

            if (logger.DataContainer.HttpProperties == null && httpContext.Request != null)
            {
                KissLog.Http.HttpRequest httpRequest = HttpRequestFactory.Create(httpContext.Request);
                logger.DataContainer.SetHttpProperties(new Http.HttpProperties(httpRequest));
            }

            if (logger.DataContainer.HttpProperties == null)
            {
                return;
            }

            bool isAuthenticated = httpContext.User?.Identity?.IsAuthenticated ?? false;

            logger.DataContainer.HttpProperties.Request.SetIsAuthenticated(isAuthenticated);

            if (httpContext.User == null || httpContext.User is ClaimsPrincipal == false)
            {
                return;
            }

            ClaimsPrincipal claimsPrincipal = httpContext.User as ClaimsPrincipal;

            if (claimsPrincipal.Identity == null || claimsPrincipal.Identity is ClaimsIdentity == false)
            {
                return;
            }

            ClaimsIdentity claimsIdentity = claimsPrincipal.Identity as ClaimsIdentity;

            List <KeyValuePair <string, string> > claims = InternalHelpers.ToKeyValuePair(claimsIdentity);

            logger.DataContainer.HttpProperties.Request.Properties.SetClaims(claims);
        }
示例#5
0
        public static HttpResponse Create(System.Web.HttpResponseBase httpResponse, long contentLength)
        {
            if (httpResponse == null)
            {
                throw new ArgumentNullException(nameof(httpResponse));
            }

            if (contentLength < 0)
            {
                throw new ArgumentException(nameof(contentLength));
            }

            var options = new HttpResponse.CreateOptions();

            options.StatusCode = httpResponse.StatusCode;
            options.Properties = new ResponseProperties(new ResponseProperties.CreateOptions
            {
                Headers       = InternalHelpers.ToKeyValuePair(httpResponse.Headers),
                ContentLength = contentLength
            });

            return(new HttpResponse(options));
        }
示例#6
0
        private void EndRequest(object sender, EventArgs e)
        {
            HttpContext ctx = HttpContext.Current;

            Logger logger = Logger.Factory.Get() as Logger;

            if (logger == null)
            {
                return;
            }

            Exception ex = ctx.Server.GetLastError();

            if (ex != null)
            {
                logger.Log(LogLevel.Error, ex);
            }

            var sniffer = ctx.Response.Filter as ResponseSniffer;

            if (ctx.Response.StatusCode >= 400 && ex == null)
            {
                if (sniffer != null)
                {
                    string responseContent = null;

                    try
                    {
                        responseContent = sniffer.GetContent();
                    }
                    catch (Exception ex1)
                    {
                        InternalHelpers.Log(ex1.ToString(), LogLevel.Error);
                    }

                    if (string.IsNullOrEmpty(responseContent) == false)
                    {
                        logger.Log(LogLevel.Error, responseContent);
                    }
                }
            }

            WebProperties webProperties = (WebProperties)HttpContext.Current.Items[Constants.HttpRequestPropertiesKey];

            if (webProperties == null)
            {
                // IIS redirect bypasses the BeginRequest() event
                webProperties = new WebProperties
                {
                    Request = HttpRequestFactory.Create(ctx.Request)
                };
            }

            KissLog.Web.HttpResponse response = HttpResponseFactory.Create(ctx.Response);
            webProperties.Response = response;

            if (logger.DataContainer.ExplicitHttpStatusCode.HasValue)
            {
                response.HttpStatusCode = logger.DataContainer.ExplicitHttpStatusCode.Value;
            }

            if (sniffer != null)
            {
                response.Properties.ContentLength = ReadResponseLength(sniffer);

                LogResponse(logger, response, sniffer);
            }

            logger.DataContainer.WebProperties = webProperties;

            IEnumerable <ILogger> loggers = Logger.Factory.GetAll();

            Logger.NotifyListeners(loggers.ToArray());
        }
        private void EndRequest(object sender, EventArgs e)
        {
            HttpContext ctx = HttpContext.Current;

            Logger logger = Logger.Factory.Get() as Logger;

            if (logger == null)
            {
                return;
            }

            Exception ex = ctx.Server.GetLastError();

            if (ex != null)
            {
                logger.Log(LogLevel.Error, ex);
            }

            var sniffer = ctx.Response.Filter as ResponseSniffer;

            if (ctx.Response.StatusCode >= 400 && ex == null)
            {
                if (sniffer != null)
                {
                    string responseContent = sniffer.GetContent();
                    if (string.IsNullOrEmpty(responseContent) == false)
                    {
                        logger.Log(LogLevel.Error, responseContent);
                    }
                }
            }

            WebRequestProperties properties = (WebRequestProperties)HttpContext.Current.Items[Constants.HttpRequestPropertiesKey];

            properties.EndDateTime = DateTime.UtcNow;

            ResponseProperties response = WebResponsePropertiesFactory.Create(ctx.Response);

            properties.Response = response;

            if (logger.DataContainer.ExplicitHttpStatusCode.HasValue)
            {
                response.HttpStatusCode = logger.DataContainer.ExplicitHttpStatusCode.Value;
            }

            if (sniffer != null)
            {
                response.ContentLength = sniffer.MirrorStream.Length;
            }

            if (sniffer != null)
            {
                using (sniffer.MirrorStream)
                {
                    sniffer.MirrorStream.Position = 0;

                    if (InternalHelpers.PreFilterShouldLogResponseBody(logger, sniffer.MirrorStream, response))
                    {
                        using (TemporaryFile tempFile = new TemporaryFile())
                        {
                            using (var fs = File.OpenWrite(tempFile.FileName))
                            {
                                sniffer.MirrorStream.CopyTo(fs);
                            }

                            string responseFileName = InternalHelpers.ResponseFileName(properties.Response.Headers);
                            logger.LogFile(tempFile.FileName, responseFileName);
                        }
                    }
                }
            }

            logger.DataContainer.WebRequestProperties = properties;

            IEnumerable <ILogger> loggers = Logger.Factory.GetAll();

            Logger.NotifyListeners(loggers.ToArray());
        }