目前,我们正在将Serilog与ApplicationInsights一起使用来记录系统。我们尝试解决的一个问题是在单个请求中将唯一操作ID附加到每个日志消息。因此可以跟踪错误消息。
为容器构建ILogger时
serilogConfig.WriteTo.ApplicationInsightsTraces(telemetryClient);
telemtryClient注册为instancePerRequest,并在Controller上的actionAttribute之一中分配唯一的OperationID
public override void OnActionExecuting(HttpActionContext actionContext)
{
var requestScope = actionContext.Request.GetDependencyScope();
var telemetryClient = requestScope.GetService(typeof(TelemetryClient)) as TelemetryClient;
telemetryClient.Context.Operation.Id = Guid.NewGuid().ToString();
base.OnActionExecuting(actionContext);
}
在控制器的构造函数内部需要记录
public ControllerA(ILogger logger)
{
var contextLogger = logger.ForContext<ControllerA>();
}
现在的问题是operationID没有出现在日志消息上。
即使我们将主ILogger注册为instancePerRequest,contextLogger仍然会获得与主要依赖对象相同的依赖对象吗?