Ведение журнала EventViewer не работает в консоли / рабочем сервисе в dotnetcore 3.1 - PullRequest
0 голосов
/ 24 апреля 2020

Я работаю над переносом исходного кода со старой консоли dotnetframework на dotnetcore 3.1 console / workser-service.

После просмотра некоторых статей и примеров из исследования Google я все еще немного озадачен почему регистрация не работает. Итак, я приложу 2 примера ниже. Первый работает, а второй не работает. Нужно ли мне повышать разрешение или что-то, о чем я не знаю?

[Пример # 1 - Это работает]

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Hosting.WindowsServices;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.EventLog;
using System.Threading.Tasks;

namespace ABCoA.Payments.EtlManager.WorkerSvc
{
  public class Program
  {
    public async static Task Main(string[] args)
    {
        var loggerFactory = LoggerFactory.Create(builder => {
            builder
                .AddFilter("Microsoft", LogLevel.Warning)
                .AddFilter("System", LogLevel.Warning)
                .AddFilter("LoggingConsoleApp.Program", LogLevel.Debug)
                .AddConsole()
                .AddEventLog();
        });
        ILogger logger = loggerFactory.CreateLogger<Program>();
        logger.LogInformation("Example log message");
    }
  }
}

[Пример # 2 - Это не работает]

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.EventLog;
using System.Threading.Tasks;

namespace ABCoA.Payments.EtlManager.WorkerSvc
{
  public class Program
  {
    public async static Task Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

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


using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System;
using System.Threading;
using System.Threading.Tasks;

namespace ABCoA.Payments.EtlManager.WorkerSvc
{
  public class WorkerService : BackgroundService
  {
    private readonly ILogger<WorkerService> _logger;

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

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

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

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


"Logging": {
  "IncludeScopes": "true",
  "LogLevel": {
    "Default": "Information",
    //"System": "Information",
    "Microsoft": "Warning",
    //"ABCoA": "Verbose",
    "Microsoft.Hosting.Lifetime": "Information"
  },
  "EventLog": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  }
}
...