我正在编写一个中间件来编写api请求日志。
但是有时响应日志将被写入两次。这是一个代码示例:
public class TestLoggingMiddleware
{
private readonly RequestDelegate _next;
private readonly ILogger _logger;
private int After = 0;
private int Before = 0;
public TestLoggingMiddleware(RequestDelegate next, ILoggerFactory logfac)
{
_logger = logfac.CreateLogger("ApiRequest");
_next = next;
}
public async Task Invoke(HttpContext context)
{
Before = 0;
After = 0;
Before++;
await _next(context);
After++;
After++;
if (After > 2)
{
_logger.LogError($"{context.Request.Path.ToString()}_{Before}_{After}");
}
}
}
Before = 1和After = 4。这个问题只是偶尔出现。
netcore版本是3.1。 代码在docker中运行。
有人知道是什么问题吗?
答案 0 :(得分:1)
您正在为每个请求运行此代码并维护全局状态。
这对于单个请求可能很好,但是一旦同时有多个请求,它就会失败。