我管理的服务向我心爱的用户显示“用户友好”错误。如果他们收到错误,通常会调用支持并提及RequestId。我使用以下代码获取此请求ID:
public string RequestId => Activity.Current?.Id ?? HttpContext.TraceIdentifier;
现在有趣的是......我们向用户显示了id但我们没有将它保存在我们的日志中:)。
目前,我们使用此代码将所有日志发送到Cloudwatch
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
(...)
loggerFactory.AddAWSProvider(
Configuration.GetAWSLoggingConfigSection("Cloudwatch"),
(l, obj, ex) =>
{
var level = "info";
if (l == LogLevel.Error || l == LogLevel.Critical) level = "error";
else if (l == LogLevel.Warning) level = "warn";
return JsonConvert.SerializeObject(new
{
level,
msg = ex?.Message ?? obj.ToString(),
meta = ex?.ToString()
});
});
(...)
}
我很难找到一个好的方法将HttpRequest一直发送到这个lambda,所以我可以一直记录Id。
你会如何处理?
谢谢你, SEB
答案 0 :(得分:1)
你可以尝试:
public class Startup
{
...
public void ConfigureServices(IServiceCollection services)
{
...
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
...
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env,
ILoggerFactory loggerFactory, IHttpContextAccessor httpContextAccessor)
{
...
var httpContext = httpContextAccessor.HttpContext;
var user = httpContext.User;
...
}
}
请告诉我这是否有效,因为我无法设置相同的环境,所以在发布之前我无法测试代码。