asp.net-core - 为什么事件日志提供程序的事件查看器中没有出现任何条目?

标签 asp.net-core iis logging asp.net-core-webapi

我在 Windows 10 Enterprise x64 计算机上使用非托管应用程序池将 dotnet core 3.1 Web API 发布到 IIS。

我正在尝试像这样配置 EventLog 提供程序...

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

...但是当我执行 logger.LogInformation("can you see me?");

时,事件查看器中没有显示任何内容

这是appsettings.jsonprogram.csController

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>();
            });
}

Controller :

  [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";
        }
    }

最佳答案

您需要在运行应用程序的服务器上创建自定义事件日志源 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")
}

关于asp.net-core - 为什么事件日志提供程序的事件查看器中没有出现任何条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60460434/

相关文章:

c# - 什么是服务以及为什么将它们添加到 ASP.NET Core 中?

asp.net - SSL 卸载重定向到 https

c# - 在没有发布的情况下在完整的 IIS 中运行 ASP.NET Core 应用程序会出现 502.5 错误

logging - 在哪里可以找到刺槐原木?

asp.net-core - 从 .NET Core 引用传统 .NET Framework

asp.net-core - ASP.NET 核心高内存消耗

c# - 如何将作用域服务注入(inject) DbContext?网络核心

c# - 安装 SDK 1.8 后出现 WaHostBootstrapper 错误

c# - Nlog 泛型方法

logging - 环回强错误处理程序并将错误记录到文件中