Skip to main content
 首页 » 编程设计

c#之在不使用 WebHost 的情况下使用 ASP.NET Core 日志记录

2024年01月26日30Renyi-Fan

我们有 .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 内容。