123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- using EVCB_OCPP.DBAPI.Models.DBContext;
- using Microsoft.AspNetCore.Http.Extensions;
- using Newtonsoft.Json;
- using System.Net;
- namespace EVCB_OCPP.DBAPI.Middleware;
- public class APILogMiddleware
- {
- private readonly RequestDelegate _next;
- private readonly ILogger<APILogMiddleware> logger;
- //private readonly string apiLogConnectionString;
- public APILogMiddleware(RequestDelegate next,
- ILogger<APILogMiddleware> logger)
- {
- _next = next;
- this.logger = logger;
- }
- public async Task Invoke(HttpContext context)
- {
- try
- {
- var request = context.Request;
- CancellationToken cancellationToken = context?.RequestAborted ?? CancellationToken.None;
- logger.LogTrace("{Id}:{Method} {Path} {Body}",context.TraceIdentifier , context.Request.Method, context.Request.Path, context.GetPreLoadBody());
- var originalBodyStream = context.Response.Body;
- var fakeResponseBody = new MemoryStream();
- context.Response.Body = fakeResponseBody;
- var task = _next(context);
- await task;
- fakeResponseBody.Seek(0, SeekOrigin.Begin);
- await fakeResponseBody.CopyToAsync(originalBodyStream);
- string bodyData = string.Empty;
- if (fakeResponseBody != null)
- {
- fakeResponseBody.Seek(0, SeekOrigin.Begin);
- bodyData = new StreamReader(fakeResponseBody).ReadToEnd();
- fakeResponseBody.Seek(0, SeekOrigin.Begin);
- }
- logger.LogTrace("{Id}:{StatusCode} {Body}", context.TraceIdentifier, context.Response.StatusCode, bodyData);
- }
- catch (Exception e)
- {
- logger.LogError(e.Message);
- logger.LogTrace(e.StackTrace);
- }
- }
- }
|