如何使用LoggerFactory和Microsoft.Extensions.Logging进行.NET Core Console使用C#进行日志记录

Ger*_*hes 10 c# logging dependency-injection nlog asp.net-core

我创建了一个使用服务层的控制台应用程序.

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));
}
Run Code Online (Sandbox Code Playgroud)

我收到此错误System.InvalidOperationException: Unable to resolve service for type 'Microsoft.Extensions.Logging.ILogger1`我猜我必须为.NET Core Logging设置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());
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Ole*_*egI 11

它应该工作:

var serviceProvider = new ServiceCollection()
                      .AddLogging() //<-- You were missing this
                      .BuildServiceProvider();
//get logger
var logger = serviceProvider.GetService<ILoggerFactory>()
            .CreateLogger<Program>();
Run Code Online (Sandbox Code Playgroud)

要安装的软件包:Microsoft.Extensions.DependencyInjection; Microsoft.Extensions.Logging;