Используйте ведение журнала ASP.NET Core без использования WebHost - PullRequest
0 голосов
/ 01 мая 2018

У нас есть приложения .NET Core, которые могут извлечь выгоду из ведения журнала ASP.NET Core (и поставщика услуг), но они не используют WebHost или WebHostBuilder.

Я хотел бы заглянуть внутрь расширений / методов, таких как ConfigureLogging или UseStartup, чтобы получить некоторое представление о том, как настроить моего корневого провайдера конфигурации / службы.

Я думал, что ASP.NET Core был открытым исходным кодом, но почему-то мне не хватает таланта, чтобы найти эти источники. Где я могу узнать больше о том, как все это настроено, и как я могу использовать их в любом консольном приложении, а не только в приложениях, использующих WebHostBuilder?

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Стоит отметить, что, начиная с .NET Core 2.1, теперь вы можете использовать HostBuilder для таких проектов. Работает очень хорошо.

0 голосов
/ 01 мая 2018

Различные компоненты из ASP.NET Core можно использовать отдельно. Таким образом, вы можете абсолютно использовать такие вещи, как Microsoft.Extensions.Logging или даже другие вещи, такие как DependencyInjection , Конфигурация или Опции отдельно, не имея фактически использовать ASP.NET Core или его WebHost.

Теперь я могу указать вам различные местоположения в источниках (например, WebHostBuilder, WebHost или компоновщик по умолчанию ), но войти в систему и запустить его в собственном приложении на самом деле довольно просто, поэтому вам не нужно просматривать все это.

Вместо этого просто добавьте ссылку на Microsoft.Extensions.Logging и ваших любимых провайдеров журналов, например Microsoft.Extensions.Logging.Console, а затем настройте фабрику регистратора и создайте регистратор:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...