sea*_*ght 5 logging asp.net-core
我创建了一个自定义中间件来处理我的Api应用程序中的异常。
我想将请求ID与异常以及我在应用程序中执行的任何其他日志记录相关联。然后,我想处理所有异常,并使用requestId生成的I 响应客户端。
这样一来,他们可以通过与我联系requestId,我可以在日志中查询并查看他们收到错误时的情况。
这是Invoke我的中间件的和requestId响应中的发送。
public async Task Invoke(HttpContext context, ILoggerFactory loggerFactory)
{
var requestId = Guid.NewGuid();
var requestScopeLogger = loggerFactory.CreateLogger("AppRequest");
using (requestScopeLogger.BeginScope("Request {requestId}", requestId))
{
try
{
await next(context);
}
catch (Exception ex)
{
await HandleExceptionAsync(context, ex, requestId);
}
}
}
private Task HandleExceptionAsync(HttpContext context, Exception exception, Guid requestId)
{
...
var response = JsonConvert.SerializeObject(new { errorMessage = clientResult.message, requestId });
context.Response.ContentType = "application/json";
context.Response.StatusCode = (int)clientResult.code;
return context.Response.WriteAsync(response);
}
Run Code Online (Sandbox Code Playgroud)
中间件先于我的其他组件(StaticFiles,Swagger,Mvc)注册 Startup.Configure
当我在Api业务逻辑或控制器中测试引发异常时,一切似乎都正常运行。
这是可接受的用法ILogger.BeginScope吗?是否可以通过这种方式包装中间件管道async?
| 归档时间: |
|
| 查看次数: |
507 次 |
| 最近记录: |