c# - 如何在 Azure WebJob 中通过 DI 配置日志记录
问题描述
我正在使用 dotnet 核心开发 Azure WebJobs (3.0.6)。我参考了微软的入门指南。根据示例,我希望有一个控制台日志记录开始。该指南的范围是有限的。在我的应用程序中,我将在不同的 dll 中使用许多类。我无法弄清楚如何在这些类中添加日志记录。示例代码是
// The main method
static async Task Main()
{
var builder = new HostBuilder();
builder.ConfigureWebJobs(b =>
{
b.AddAzureStorageCoreServices();
b.AddAzureStorage();
});
builder.ConfigureLogging((context, b) =>
{
b.AddConsole();
});
var host = builder.Build();
using (host)
{
await host.RunAsync();
}
}
// 队列触发类
public class QueueListenerService
{
public static void QueueListener([QueueTrigger("myqueue")] string message, ILogger logger)
{
logger.LogInformation("The logger works here");
// how can I pass an instance of ILogger in the constructor below
MyWorker myWorker = new MyWorker();
}
}
// MyWorker 类在不同的程序集中
public class MyWorker
{
public MyWorker(ILogger logger)
{
// I want to use logger here being injected
}
}
我在 dotnet core 控制台应用程序中提到了几个 DI 示例,它们使用服务收集方法。我也检查了这个博客,但对我来说,这就是我所做的,但我的 ILogger 没有得到解决。当我创建 MyWorker 实例时,它要求我传递一个 ILogger 实例
解决方案
您已接近解决方案。您需要更改的主要内容是让服务集合MyWorker
为您创建实例。
我迅速扩展了我最近的 Webjob 示例项目,以包括带有依赖注入的控制台日志记录。请参阅此提交以了解我如何添加它。
您主要需要为您的QueueListenerService
.
builder.ConfigureServices(services =>
{
services.AddScoped<QueueListenerService>();
services.AddScoped<MyWorker>();
});
public class QueueListenerService
{
public QueueListenerService(MyWorker worker){
_Worker = worker;
}
public static void QueueListener([QueueTrigger("myqueue")] string message, ILogger logger)
{
logger.LogInformation("The logger works here");
_Worker.DoStuff()
}
}
推荐阅读
- jquery - 如何将数据写入数组Jquery?
- python - 如何正确处理此读取超时错误?
- java - 如何在 Java FX 应用程序中执行外部调用以构建和运行 arduino 程序?
- php - PHP Canvas 无法显示
- javascript - 使用 moment.js 倒计时到特定的日期和时间
- javascript - 如何从内容可编辑的 div 复制内文?
- javascript - javascript中的待办事项列表
- python - 有没有办法使用在页面访问时生成随机数的实体来扩展 wagtail 的草稿?
- vue.js - 使用 Vue.js 更改道具后可编辑 div 中的插入符号位置
- jquery - 如何在角度模板中动态插入不相同的模板?