2017-09-19 380 views
2

我已经创建了一个使用服务层的控制台应用程序。如何使用LoggerFactory和Microsoft.Extensions.Logging进行.NET Core Console日志记录使用C#

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`和我猜我必须设置的LoggerFactory和Microsoft.Extensions.Logging对.NET核心日志,但我不能做对。

我已经试过这样的事情在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()); 

任何想法?

+0

您忘记调用服务集合上的'.AddLogging()'以将该功能添加到容器。 – Nkosi

回答

3

它应该工作:

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;

相关问题