Azure Application Insights仅记录错误状态码无详情的技术求助
解决方案
1. 捕获并记录完整异常信息
添加全局异常处理中间件,确保未处理的异常被Serilog完整记录:
app.UseExceptionHandler(errorApp => { errorApp.Run(async context => { var exceptionFeature = context.Features.Get<IExceptionHandlerPathFeature>(); if (exceptionFeature?.Error != null) { // 记录异常详情,包含栈跟踪和请求路径 Log.Error(exceptionFeature.Error, "未处理异常,请求路径:{Path}", exceptionFeature.Path); } context.Response.StatusCode = StatusCodes.Status500InternalServerError; await context.Response.WriteAsync("服务器发生未预期错误"); }); });
在业务代码中捕获异常时,需把异常对象传递给Serilog,保留完整错误信息:
try { // 业务逻辑代码 } catch (Exception ex) { Log.Error(ex, "处理[{Operation}]时失败", "用户创建"); return BadRequest("请求处理失败"); }
2. 调整Serilog配置,保证日志级别与上下文完整
在appsettings.json中配置Serilog最小日志级别,确保Error及以上级别的日志被采集:
"Serilog": { "MinimumLevel": { "Default": "Information", "Override": { "Microsoft": "Warning", "System": "Warning" } } }
修改Serilog的Application Insights写入配置,添加上下文信息(如请求ID):
.UseSerilog((hostingContext, loggerConfiguration) => loggerConfiguration .ReadFrom.Configuration(hostingContext.Configuration) .Enrich.FromLogContext() .WriteTo.ApplicationInsights(telemetryConfiguration, TelemetryConverter.Traces))
3. 启用Application Insights原生请求与异常收集
添加官方Microsoft.ApplicationInsights.AspNetCore包,启用自动采集功能,它会自动收集请求详情、异常栈、依赖调用等数据,且能和Serilog日志通过Operation ID关联:
builder.Services.AddApplicationInsightsTelemetry(options => { options.ConnectionString = builder.Configuration["ApplicationInsights:ConnectionString"]; options.SetAzureTokenCredential(new DefaultAzureCredential()); });
4. 在Application Insights中查看详细日志
- 进入Failures面板:这里会聚合所有失败请求,点击具体条目可查看完整请求链路、异常栈、关联日志。
- 进入Traces面板:筛选
Level:Error,点击单条日志的「详情」按钮,即可查看完整的错误描述、栈跟踪及上下文信息。
内容的提问来源于stack exchange,提问作者Raghu
相关产品推荐
相关产品推荐

