Example #1
0
        public async Task InvokeAsync(HttpContext context, ILogStorage logStorage)
        {
            var log = new LoggerModel
            {
                Path        = context.Request.Path,
                Method      = context.Request.Method,
                QueryString = context.Request.QueryString.ToString()
            };

            if (context.Request.Method == "POST")
            {
                context.Request.EnableBuffering();
                var body = await new StreamReader(context.Request.Body)//что пользователь отправил в теле запроса
                           .ReadToEndAsync();
                context.Request.Body.Position = 0;
                log.RequestBody = body;
            }
            log.RequestedOn = DateTimeOffset.Now;

            var originalBodyStream = context.Response.Body;

            using (var responseBodyStream = new MemoryStream())
            {
                context.Response.Body = responseBodyStream;

                await _next.Invoke(context);

                responseBodyStream.Position = 0;
                var response = await new StreamReader(responseBodyStream)
                               .ReadToEndAsync();
                responseBodyStream.Position = 0;

                log.Response     = response;
                log.ResponseCode = context.Response.StatusCode.ToString();
                //log.RespondedOn = DateTime.UtcNow;
                log.RespondedOn = DateTimeOffset.Now;

                logStorage.Store(log);

                await responseBodyStream.CopyToAsync(originalBodyStream);
            }
            //_logger.LogInformation(
            //    "Request {header.Value} {method} {url} => {statusCode}",
            //    context.Request?.Headers,
            //    context.Request?.Method,
            //    context.Request?.Path.Value,
            //    context.Response?.StatusCode);
        }
Example #2
0
        public void Store(LoggerModel log)
        {
            string[] lines =
            {
                $"Path: {log.Path}",
                $"QueryString: {log.QueryString}",
                $"Method: {log.Method}",
                $"RequestBody: {log.RequestBody}",
                $"Requested at: {log.RequestedOn}",
                $"Response: {log.Response}",
                $"ResponseCode: {log.ResponseCode}",
                $"Responded at: {log.RespondedOn}",
                Environment.NewLine
            };

            System.IO.File.AppendAllLines(path, lines);
        }