如何使用 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.ILogger1`,我猜我必须为 .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.getLogger用法

LoggerFactory.getLogger用法

突然得到“LoggerFactory 不是 Logback LoggerContext 但 Logback 在类路径上。”并且无法运行

Maven 插件构建但由于 java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory 而无法执行

mybatis-plus-3.3.0(NoClassDefFoundError: org/mybatis/logging/LoggerFactory)