在Azure函数v2中添加中间件或类似功能

时间:2019-06-19 11:19:45

标签: c# azure-functions

我需要向我的日志记录上下文中添加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的消息时,就会记录该日志。

1 个答案:

答案 0 :(得分:0)

简短的版本是,您无法使用内置绑定影响在函数运行之前运行的日志记录代码。

您将无法更改第一条“ C#计时器触发函数已处理的消息”,因为此时尚未读取该消息,这与尝试获取MVC中设置的相关ID相同项目,然后读取传入的HTTP请求。

您可以通过创建custom binding,在首次收到消息后立即添加日志记录。我鼓励您仔细考虑是否值得构建和维护自定义绑定,以便更快地进行日志记录设置。