使用ASP.NET Core日志记录而不使用WebHost

时间:2018-05-01 17:49:47

标签: c# asp.net-core .net-core

我们的.NET Core应用程序可以从ASP.NET Core日志记录(和服务提供商)中受益,但他们并未使用任何WebHostWebHostBuilder

我想查看ConfigureLoggingUseStartup内部的扩展/方法,以获得有关如何设置我的根配置/服务提供商的一些灵感。

我认为ASP.NET Core是开源的,但不知何故我缺乏找到这些来源的才能。我在哪里可以详细了解如何设置所有这些内容,以及如何在任何控制台应用中使用它们,而不仅仅是使用WebHostBuilder的应用?

2 个答案:

答案 0 :(得分:6)

ASP.NET Core中的各种组件都可以单独使用。因此,您绝对可以使用Microsoft.Extensions.Logging之类的内容,甚至可以分别使用其他内容,例如DependencyInjectionConfigurationOptions,而无需实际使用ASP.NET Core或其WebHost。 / p>

我现在可以指向源代码中的各个位置(例如the WebHostBuilderthe WebHostthe default builder),但是在自己的应用程序中记录和运行实际上非常简单,所以你不需要浏览所有这些。

相反,只需添加对Microsoft.Extensions.Logging和您最喜欢的日志记录提供程序的引用,例如Microsoft.Extensions.Logging.Console,然后设置记录器工厂并创建记录器:

fun getInstance(context: Context): DatabaseInstance {
    if (INSTANCE == null) {
        synchronized(DatabaseInstance::class) {
            INSTANCE = Room.databaseBuilder(context.applicationContext,
                DatabaseInstance::class.java, "my_database.db")
                .allowMainThreadQueries().fallbackToDestructiveMigration().build()
        }
    }
    return INSTANCE!!
}

这就是让日志记录工作所需的一切。当然,您现在需要创建自己的记录器并将其传递到您需要的记录器,但您可以完全控制它。

如果您愿意,还可以通过添加对Microsoft.Extensions.DependencyInjection的引用并创建服务集合来向混合中添加依赖注入:

var loggerFactory = new LoggerFactory();
loggerFactory.AddConsole();

var logger = loggerFactory.CreateLogger("categoryName");
logger.LogInformation("Whee!");
var services = new ServiceCollection();

// add logging
services.AddLogging(loggerBuilder =>
{
    loggerBuilder.AddConsole();
});

// add your services
services.AddTransient<MyService>();


// create the service provider
var serviceProvider = services.BuildServiceProvider();

// request your service and do something
var service = serviceProvider.GetService<MyService>();
service.DoSomething();

突然间,您只需几行就可以进行依赖注入工作。因此,您可以为控制台应用程序设置自己的环境,然后为您的应用程序构建这些技术 - 而不依赖于实际的ASP.NET Core内容。

答案 1 :(得分:0)

值得一提的是,从.NET Core 2.1开始,您现在可以将HostBuilder用于此类项目。效果很好。