如何使用 LoggerFactory 和 Microsoft.Extensions.Logging 使用 C# 进行 .NET Core 控制台日志记录
Posted
技术标签:
【中文标题】如何使用 LoggerFactory 和 Microsoft.Extensions.Logging 使用 C# 进行 .NET Core 控制台日志记录【英文标题】:How to Use LoggerFactory and Microsoft.Extensions.Logging for .NET Core Console Logging With C# 【发布时间】:2018-02-27 22:22:53 【问题描述】:我创建了一个使用服务层的控制台应用程序。
Program.cs
public static void Main(string[] args)
// Create service collection
var serviceCollection = new ServiceCollection();
ConfigureServices(serviceCollection);
// Create service provider
var serviceProvider = serviceCollection.BuildServiceProvider();
// Entry to run app
serviceProvider.GetService<App>().Run().RunSynchronously();
private static void ConfigureServices(IServiceCollection serviceCollection)
// Configuration
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", false)
.Build();
serviceCollection.AddOptions();
serviceCollection.Configure<Settings>(options =>
//...
);
// Services
serviceCollection.AddTransient<IOneService, OneService>();
serviceCollection.AddTransient<ISecondService, SecondService>();
// Repositories
serviceCollection.AddTransient<MyContext, MyContext>();
serviceCollection.AddTransient<IOneRepository, OneRepository>();
// App
serviceCollection.AddTransient<App>();
// Logger
// Automapper
serviceCollection.AddSingleton(new AutoMapperProfileConfiguration());
serviceCollection.AddScoped<IMapper>(sp =>
new Mapper(sp.GetRequiredService<IConfigurationProvider>(), sp.GetService));
我收到此错误 System.InvalidOperationException: Unable to resolve service for type 'Microsoft.Extensions.Logging.ILogger
1`,我猜我必须为 .NET Core 日志记录设置 LoggerFactory 和 Microsoft.Extensions.Logging,但我做错了。
我在 Main() 中尝试过这样的事情:
// Attempt 1
ILoggerFactory loggerFactory = new LoggerFactory()
.AddConsole()
.AddDebug();
ILogger logger = loggerFactory.CreateLogger<Program>();
logger.LogInformation(
"This is a test of the emergency broadcast system.");
// Attempt 2
serviceCollection.AddSingleton(new LoggerFactory()
.AddConsole()
.AddDebug());
有什么想法吗?
【问题讨论】:
您忘记在服务集合上调用.AddLogging()
以将该功能添加到容器中。
【参考方案1】:
对于netCore
var serviceProvider = new ServiceCollection()
.AddLogging(x => x.AddConsole().SetMinimumLevel(LogLevel.Debug))
.BuildServiceProvider();
var logger = serviceProvider.GetService<ILoggerFactory>()
.CreateLogger<Program>();
logger.LogDebug("Starting Program...");
【讨论】:
【参考方案2】:它应该可以工作:
var serviceProvider = new ServiceCollection()
.AddLogging() //<-- You were missing this
.BuildServiceProvider();
//get logger
var logger = serviceProvider.GetService<ILoggerFactory>()
.CreateLogger<Program>();
要安装的软件包: Microsoft.Extensions.DependencyInjection; Microsoft.Extensions.Logging;
【讨论】:
以上是关于如何使用 LoggerFactory 和 Microsoft.Extensions.Logging 使用 C# 进行 .NET Core 控制台日志记录的主要内容,如果未能解决你的问题,请参考以下文章
Dotnet 核心中的 LoggerFactory 如何被调用
突然得到“LoggerFactory 不是 Logback LoggerContext 但 Logback 在类路径上。”并且无法运行
Maven 插件构建但由于 java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory 而无法执行
mybatis-plus-3.3.0(NoClassDefFoundError: org/mybatis/logging/LoggerFactory)