Почему в Event Viewer не отображаются записи провайдера EventLog? - PullRequest
3 голосов
/ 29 февраля 2020

У меня есть веб-API do tnet core 3.1, опубликованный в IIS с неуправляемым пулом приложений на компьютере Windows 10 Enterprise x64.

Я пытаюсь настроить провайдера EventLog следующим образом ...

.ConfigureLogging(logging =>
{
    logging.ClearProviders();
    logging.AddEventLog(new EventLogSettings { LogName = "Web API ABC" 
}

... но в окне просмотра событий ничего не появляется, когда я logger.LogInformation("can you see me?");

Здесь указаны appsettings.json, program.cs и Controller

appsettings. json

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

Program.cs

public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
             .ConfigureLogging(logging =>
             {
                 logging.ClearProviders();
                 logging.AddConsole();
                 logging.AddEventLog(new Microsoft.Extensions.Logging.EventLog.EventLogSettings { LogName = "Web API ABC" });
             })
                .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

Контроллер:

  [ApiController]
  [Route("[controller]")]
  public class MyGreatController : ControllerBase
  {
        private IConfiguration config;
        private readonly ILogger<MyGreatController> logger;

        public MyGreatController(IConfiguration _config, ILogger<MyGreatController> _logger)
        {
            config = _config;
            logger = _logger;
        }

        [HttpGet]
        [Route("hello")]
        public string HelloWorld()
        {
            logger.LogInformation("can you see me?");
            return "hello world";
        }
    }

1 Ответ

1 голос
/ 29 февраля 2020

Вам нужно создать пользовательский источник журнала событий Web API ABC на сервере, на котором работает ваше приложение (однократная настройка), прежде чем вы сможете записывать в него журналы.

Вот пример использования PowerShell чтобы создать свой источник журнала событий:

$ErrorActionPreference = "Stop"

$sourceExists = [System.Diagnostics.Eventlog]::SourceExists("Web API ABC")
if ($sourceExists -eq $false){
    [System.Diagnostics.EventLog]::CreateEventSource("Web API ABC", "Application")
}
...