为其他服务集合配置日志记录提供程序



这是.NET 6中的一个ASP.NET应用程序。有一个向导界面,用户在其中输入一些数据,然后根据输入,我用完成任务所需的服务设置了一个新的依赖项注入容器。我的问题是,来自第二个容器的ILogger<>实例没有使用我设置的自定义ILoggingProvider

程序.cs:

var builder = WebApplication.CreateBuilder(args);
builder.Logging.ClearProviders();
builder.Logging.AddDebug();
builder.Logging.AddSignalRLogging();
public static class ILoggingBuilderExtensions
{
public static ILoggingBuilder AddSignalRLogging(this ILoggingBuilder builder) 
=> builder.AddProvider(new SignalRLoggerProvider(builder.Services))
.AddFilter<SignalRLoggerProvider>("MyNamespace", LogLevel.Information);
}

SignalRLoggerProvider来自如何实现ILogger向SignalR集线器发送消息?。

控制器:

IServiceCollection services = new ServiceCollection();
services.AddLogging();
services.AddSignalR();
services.AddSingleton(_sheetsClient); // this was injected into the controller
services.AddSingleton<ITeamReaderService>(new PostedTeamReaderService(model.Divisions));
string[] divisionNames = model.Divisions.Keys.ToArray();
foreach (string divisionName in divisionNames)
{
services.AddSingleton<IDivisionSheetService>(provider => new DivisionSheetService(divisionName,
provider.GetRequiredService<StandingsRequestCreatorFactory>(),
provider.GetRequiredService<ISheetsClient>(),
provider.GetRequiredService<IOptionsMonitor<ScoreSheetConfiguration>>(),
provider.GetRequiredService<ILogger<DivisionSheetService>>()) 
);
}

我知道我的提供程序是有效的,因为当我将依赖项从HostBuilder的服务集合(_sheetsClient(注入的控制器中进行日志记录时,这些消息可以正常工作。在来自另一个容器(DivisionSheetService(的类中,这些日志消息不存在,当我在调试器中查看ILogger实例时,它显示它没有要写入的记录器。

因此,第二个容器肯定不知道我的自定义日志记录提供程序,但我不知道如何在那里注册它。

提前谢谢。

由于您要从头开始创建新的ServiceCollection,因此还需要从头开始添加日志基础设施:

IServiceCollection services = new ServiceCollection();
services.AddLogging(builder => builder.AddDebug().AddSignalRLogging());

相关内容

  • 没有找到相关文章

最新更新