我们有 .NET Core 应用程序可以从 ASP.NET Core 日志记录(和服务提供商)中受益,但它们没有使用任何 WebHost或 WebHostBuilder .
我想深入了解扩展/方法,例如 ConfigureLogging或 UseStartup获得一些关于如何设置我的根配置/服务提供商的灵感。
我原以为 ASP.NET Core 是开源的,但不知何故我缺乏找到这些资源的天赋。我在哪里可以了解更多关于如何设置所有这些的信息,以及我如何在任何控制台应用程序中使用它们,而不仅仅是使用 WebHostBuilder 的应用程序。 ?
请您参考如下方法:
来自 ASP.NET Core 的各种组件都可以单独使用。所以你绝对可以使用像 Microsoft.Extensions.Logging 这样的东西,甚至其他类似 DependencyInjection 的东西, Configuration或 Options无需实际使用 ASP.NET Core 或其 WebHost。
我现在可以将您指向源代码中的不同位置(例如 the WebHostBuilder 、 the WebHost 或 the default builder ),但在您自己的应用程序中登录和运行实际上非常简单,因此您不必需要浏览所有这些内容。
相反,只需添加对 Microsoft.Extensions.Logging 的引用和您最喜欢的日志记录提供商,例如Microsoft.Extensions.Logging.Console ,然后设置记录器工厂并创建记录器:
var loggerFactory = new LoggerFactory();
loggerFactory.AddConsole();
var logger = loggerFactory.CreateLogger("categoryName");
logger.LogInformation("Whee!");
这就是让日志正常工作所需的全部内容。当然,您现在需要创建自己的记录器并将其传递到您需要的地方,但您可以完全控制它。
如果愿意,您还可以通过添加对 Microsoft.Extensions.DependencyInjection 的引用来添加依赖注入(inject)。并创建一个服务集合:
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();
public class MyService
{
private readonly ILogger<MyService> _logger;
public MyService(ILogger<MyService> logger)
{
_logger = logger;
}
public void DoSomething()
{
_logger.LogInformation("Did something!");
}
}
突然之间,您只需几行即可进行依赖注入(inject)。因此,您可以为控制台应用程序设置自己的环境,然后基于这些技术为您的应用程序构建 — 无需依赖实际的 ASP.NET Core 内容。
