【问题标题】:How can I log events to the Event Viewer in an ASP.NET Core Web API?如何在 ASP.NET Core Web API 中将事件记录到事件查看器?
【发布时间】:2019-02-17 23:22:55
【问题描述】:

我正在尝试在 Windows Server 2016 Standard 上托管的 ASP.NET Core 2.1 Web API 中登录事件查看器。

我的控制器中有这个:

private readonly ILogger<MyController> _logger;
private readonly MyContext _context;

public TestController(MyContext context, ILogger<MyController> logger)
{
    _context = context;
    _logger = logger;
}

但我认为我在 Program.cs 中的 CreateWebHostBuilder() 方法中做错了,因为它不起作用:

我有这个:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();

我将其修改为:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
            .ConfigureLogging((hostingContext, logging) =>
            {
                logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
                logging.AddEventSourceLogger();
            });

但我一定做错了什么......有什么想法吗?我在这里读到,显然 EVent Viewer 日志记录现在已融入 .Net Core 2.1 Write to EventLog in .Net Core

【问题讨论】:

  • 看另一个例子,我添加了 loggerFactory.AddEventLog();到我在 Startup.cs 中的 Configure() 方法,但它没有找到 AddEventLog() 方法('ILoggerFactory' 不包含'AddEventLog'的定义......)

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


【解决方案1】:

对于使用 .NET Core 2.2 偶然发现此问题的任何人,现在应该在 Program.cs 中添加事件日志记录器(来自 Microsoft.Extensions.Logging.EventLog):

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

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .ConfigureLogging((context, logging) =>
        {
            logging.AddEventLog();
        })
        .UseStartup<Startup>();

这在.NET Core Logging docs 底部注明。

更新:如果有人在 .NET Core 2.2 之后仍然登陆这里,这仍然与 .NET Core 3.1 logging 有关。

【讨论】:

  • 请注意,您需要添加另一个 nuget 包:Microsoft.Extensions.Logging.EventLog,它未包含在 Microsoft.Extensions.Logging 包中
【解决方案2】:

好的,我必须将 Microsoft.Extensions.Logging.EventLog 添加到项目中(来自 Nuget)。

然后,在 Startup.cs 中:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
   loggerFactory.AddEventLog();
}

【讨论】:

  • 奇怪的是它可以在我的开发机器(Windows 10)上运行,但不能在我的服务器上运行(Windows Server 2016 Standard):(
  • 如果它适用于 Windows 10 而不是 Server 2016,则很可能是权限或组策略问题
猜你喜欢
  • 2011-04-05
  • 1970-01-01
  • 2021-05-22
  • 1970-01-01
  • 2018-12-22
  • 2022-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多