Azure WebJob 日志记录问题

问题描述 投票:0回答:1

我的 Azure WebJob 遇到问题,我正在尝试确定日志转储到何处(是否),以便我可以解决问题。

我正在使用.NET7,并且 Program.cs 中有以下内容:

builder.ConfigureLogging( b =>
{
    b.AddConsole();
    b.AddAzureWebAppDiagnostics();
} );

我已将“日志记录:LogLevel:默认”设置为“信息”,并将“日志记录:LogLevel:Microsoft.AspNetCore”设置为“警告”。

然后,我可以使用带有 QueueTrigger 参数的函数来根据我的应用服务的需要运行。即,当我需要发送电子邮件时。该消息由 AppService 添加到队列中 - 我可以看到这一点。然后它会落入 -poison 队列,因此它会被 WebJob 看到并处理 - 它只是失败了。有时,如果我手动将消息添加到队列(通过门户),它会成功,但这有点偶然。

门户内的日志(Web 作业 -> 日志 -> 切换输出)中不会显示任何与触发的队列消息相关的内容 - 无论它是否有效。我尝试为“文件系统”和“Blob”启用“应用程序服务日志”。两者均不显示任何 Web 作业信息。

我缺少什么想法吗?如果我能得到一条错误消息来处理,我就可以尝试解决发生的问题。想法?

编辑

小更新 - 我可能可以弄清楚如何让 ILogger 转储消息并从中获取一些东西。或许。但是,在我的 WebJobs 的早期版本(使用 Framework 4.8)中,我会收到类似的消息

执行“Functions.CheckEmails”(原因=“检测到新队列消息” 在'队列名称'上。',Id=9d5e4c3a-0a2d-4da1-85b0-1887d816e7a7)

在我的日志中,无需执行任何操作。他们直接从应用程序运行中出来。而且,当队列消息失败并放入有害队列时,我也会在那里获得详细信息。如何在 .NET 7 中再次使其正常工作?

azure logging azure-webjobs
1个回答
0
投票

我按照MS Doc创建了队列触发功能。

我只需在代码中添加日志记录

ConfigureLogging
就可以在日志中获取队列触发的消息。

    var builder = new HostBuilder();
    builder.UseEnvironment(EnvironmentName.Development);
    builder.ConfigureLogging((context, b) =>
    {
        b.AddConsole();
    });
    builder.ConfigureWebJobs(b =>
    {
        b.AddAzureStorageCoreServices();
        b.AddAzureStorageQueues();
    });
    
    var host = builder.Build();
    using (host)
    {
        await host.RunAsync();
    } } ```
  • AzureWebJobsStorage
    =>
    Azure App Service
    中添加了
    Environment Variables

enter image description here

  • 我还没有在
    appsettings.json
    中设置任何日志记录配置。

我的

appsettings.json

{
  "AzureWebJobsStorage": "DefaultEndpointsProtocol=https;AccountName=SAAccount;AccountKey=**********;EndpointSuffix=core.windows.net"
}

我的

.csproj
文件:

<Project Sdk="Microsoft.NET.Sdk;Microsoft.NET.Sdk.Publish">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net7.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>
  <ItemGroup>
    <None Remove="appsettings.json" />
  </ItemGroup>
  <ItemGroup>
    <Content Include="appsettings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions" Version="4.0.1" />
    <PackageReference Include="Microsoft.Azure.WebJobs.Extensions.Storage" Version="5.2.0" />
    <PackageReference Include="Microsoft.Extensions.Logging" Version="6.0.0" />
    <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="6.0.0" />
  </ItemGroup>
  <ItemGroup>
    <Compile Update="Functions.cs">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Compile>
  </ItemGroup>
  <ItemGroup>
    <None Update="Settings.job">
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </None>
  </ItemGroup>
</Project>

我观察到两种类型的作业(连续作业和计划作业)的日志是不同的。

队列中的消息:

enter image description here

运行作业中的默认日志记录级别:

LoggerFilterOptions {
  "MinLevel": "Information",
  "Rules": []
}

enter image description here

连续工作:

  • 我发现连续作业未记录触发消息。我可以看到启用应用服务日志的警告消息。 enter image description here

预定工作:

但是对于

Scheduled Job
我可以看到从队列触发的消息。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.