我的 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 中再次使其正常工作?
我按照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
。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>
我观察到两种类型的作业(连续作业和计划作业)的日志是不同的。
队列中的消息:
运行作业中的默认日志记录级别:
LoggerFilterOptions {
"MinLevel": "Information",
"Rules": []
}
连续工作:
预定工作:
但是对于
Scheduled Job
我可以看到从队列触发的消息。