【问题标题】:Use ASP.NET Core logging without using WebHost在不使用 WebHost 的情况下使用 ASP.NET Core 日志记录
【发布时间】:2018-05-01 17:49:46
【问题描述】:

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

我想深入了解ConfigureLoggingUseStartup 等扩展/方法,以获得有关如何设置我的根配置/服务提供者的一些灵感。

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

【问题讨论】:

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


【解决方案1】:

来自 ASP.NET Core 的各种组件都可以单独使用。因此,您绝对可以单独使用 Microsoft.Extensions.Logging 之类的东西,甚至是 DependencyInjectionConfigurationOptions 之类的东西,而无需实际使用 ASP.NET Core 或其 WebHost。

我现在可以将您指向源中的各个位置(例如 the WebHostBuilderthe WebHostthe default builder),但是在您自己的应用程序中启动和运行实际上非常简单,所以您不需要需要浏览所有内容。

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

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

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

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

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

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!");
    }
}

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

【讨论】:

  • 非常感谢。我正在使用相同的信息来启动自己的 IHost/IHostBuilder 实现,但它看起来像是 ASP.NET Core 2.1 附带的:github.com/aspnet/Hosting/blob/dev/src/…
  • 是的,主机构建器是对正在开发的 Web 主机构建器的进一步抽象,并将在 2.1 之后继续发展。但与 WebHost 类似,它主要是为类似主机的应用程序设计的,因此对于通用控制台应用程序,您仍然很可能只是设置自己想要的部分(如图所示,它真的并不复杂)。
  • Mine 是托管 gRPC 服务器的类似主机的服务。 ;) 我很乐意使用这种抽象。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-17
    • 2019-12-11
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 2016-11-02
    相关资源
    最近更新 更多