我需要向我的日志记录上下文中添加correlationId,并通过在项目中添加CorrelationId nuget并设置其中间件来在MVC项目中做到这一点,但是我无法在Azure函数中做到这一点。
我已经使用依赖注入加载了ICorrelationContextAccessor,然后像这样设置我的correlationId:
[FunctionName("func1")]
public async Task Run([ServiceBusTrigger("mytopic", "MySubscription", Connection = "ServiceBusConnectionString")]Message message)
{
_correlationContextAccessor.CorrelationContext = _correlationContextFactory.Create(message.CorrelationId, "X-Correlation-ID");
_logger.LogInformation($"C# ServiceBus topic trigger function processed message: {message.MessageId}, {Encoding.UTF8.GetString(message.Body)}");
它工作正常,我在下面的日志行以及该函数的服务中看到我的correlationId。我唯一缺少的是我有关于该函数的开始和结束的日志,而该日志仍然没有correlationId,这是有道理的,因为当该函数想要记录它已收到未设置correlationId的消息时,就会记录该日志。
答案 0 :(得分:0)
简短的版本是,您无法使用内置绑定影响在函数运行之前运行的日志记录代码。
您将无法更改第一条“ C#计时器触发函数已处理的消息”,因为此时尚未读取该消息,这与尝试获取MVC中设置的相关ID相同项目,然后读取传入的HTTP请求。
您可以通过创建custom binding,在首次收到消息后立即添加日志记录。我鼓励您仔细考虑是否值得构建和维护自定义绑定,以便更快地进行日志记录设置。