Как настроить журнал событий для .NET Core 3.0 Worker Service - PullRequest
1 голос
/ 08 июля 2019

Я работаю с новым шаблоном приложения Worker Service с .NET Core 3.0 Preview и пытаюсь добавить запись событий, используя метод AddEventLog. Однако я не вижу ни одного из своих журналов в средстве просмотра событий в Windows.

У меня очень простая настройка приложения Worker, и я настроил запись в файл Program.cs следующим образом:

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
    .UseWindowsService()
    .ConfigureLogging((context, logging) =>
    {
        logging.AddEventLog(new EventLogSettings()
        {
            SourceName = "MyTestSource",
            LogName = "MyTestLog"
        });
    })
    .ConfigureServices((hostContext, services) =>
    {
        services.AddHostedService<Worker>();
    });

У меня есть несколько операторов записи в файле Worker.cs:

private readonly ILogger<Worker> _logger;

public Worker(ILogger<Worker> logger)
{
    _logger = logger;
}

public override async Task StartAsync(CancellationToken cancellationToken)
{
    _logger.LogInformation($"Worker started at: {DateTime.Now}");
    await base.StartAsync(cancellationToken);
}

public override async Task StopAsync(CancellationToken cancellationToken)
{
    _logger.LogInformation($"Worker stopped at: {DateTime.Now}");
    await base.StopAsync(cancellationToken);
}

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
    while (!stoppingToken.IsCancellationRequested)
    {
        _logger.LogInformation( $"Worker running at: {DateTime.Now}");
        await Task.Delay(1000, stoppingToken);
    }
}

Чтобы настроить журналы событий, я запустил в командной строке Powershell с повышенными правами следующее:

New-EventLog -LogName MyTestLog -Source MyTestSource

Если я открою «Просмотр событий», я вижу «MyTestLog», указанный ниже «Журналы приложений и служб».

Затем, чтобы настроить мой Worker в качестве службы Windows, я запустил следующие команды из командной строки с повышенными привилегиями:

dotnet publish -o publish (публикует проект и выходные данные для публикации каталога)

sc create MyTestService binPath=<path to exe in publish directory>

Служба успешно создана, и я вижу ее в приложении просмотра служб. Оттуда я вручную запускаю службу, а затем снова проверяю в средстве просмотра событий, и журналы не отображаются.

Я ожидал, что там будут какие-то бревна. Однако раздел «MyTestLog» остается пустым в средстве просмотра событий.

1 Ответ

1 голос
/ 09 июля 2019

Итак, я смог найти проблему, о которой сообщалось здесь .

По сути, это сводится к изменению последней версии .NET Core 3.0 Preview, в которой журналы событий теперь фильтруются на уровне предупреждений по умолчанию. Таким образом, вы не видите никаких информационных журналов.

Исправлено было просто отредактировать файл appsettings.json, чтобы он выглядел следующим образом:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    },
    "EventLog": {
      "LogLevel": {
        "Default": "Information",
        "Microsoft.Hosting.Lifetime": "Information"
      }
    }
  }
}

Это переопределяет набор по умолчанию и позволяет снова просматривать информационные журналы.

...