ASP.Net Core 1 日志记录错误 - 找不到源应用程序中事件 ID xxxx 的描述

问题描述 投票:0回答:2

我想从 ASP.Net Core 应用程序的控制器方法写入 Windows 事件日志。

我遇到的问题是,在我期望写入日志信息的地方,我不断收到错误/信息日志:

来自源应用程序的事件 ID xxxx 的描述无法 被发现。引发此事件的组件未安装 在您的本地计算机上或安装已损坏。你可以 在本地计算机上安装或修复组件。

如果事件源自另一台计算机,则显示信息 必须与事件一起保存。

活动中包含以下信息:

My.Fully.Qualified.Namespace.WebApi.Controllers.MyController 错误 发生在方法“MyMethod”中

消息资源存在,但在消息中找不到消息 字符串/消息表

快速说明一下,在 .Net Core 之前,我总是通过使用 Powershell 或 Command 创建事件源或正确配置 Microsoft.Practices.EnterpriseLibrary.Logging Application block 或其他第三方库来解决类似的错误

我使用的方法是:

安装 Nuget 包后:

Microsoft.Extensions.Logging.AbstractionsMicrosoft.Extensions.Logging,我在“开始配置”代码块中指定 EventLog Provider

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { loggerFactory.AddConsole(Configuration.GetSection("Logging")); loggerFactory .AddDebug() .AddEventLog(); //... rest of the code here }

对于每个控制器,使用ILogger<T>

方法

public class MyController : Controller { private readonly IMyRepository _myRepository; private readonly ILogger _logger; public MyController(IMyRepository myRepository, ILogger<MyController> logger) { _myRepository = myRepository; _logger = logger; } public bool MyMethod(MyRequestObject request) { try { var response = privateDoSomethingMethod(request); return response.Success; } catch (Exception ex) { _logger.LogError(6666,ex, "Error occured when doing stuff."); return false; } }

这是基于

关于日志记录的官方文档

我读过并尝试过的内容:

  • 找不到源中事件 ID 的描述
  • 尝试运行 .NET CORE 应用程序时出现 IIS 错误 -2147024809
  • 在 IIS 8.5 中启动 ASP.NET 5 MVC 6 Web 应用程序时,我收到针对 HttpPlatformHandler 的 HTTP500 和事件 1001
  • I记录器界面
  • ASP.NET Core 日志记录教程 – 哪些仍然有效,哪些发生了变化?
c# asp.net-core event-log
2个回答
0
投票
我无法在.Net Core 2.0中使用loggerFactory.AddEventLog()。由于 Microsoft.Extensions.Logger.EventLog 仅存在于 .net 4.5.1 中,尽管 Nuget 包可用于 2.0.0

here ,因此看起来需要将其移植到 Core。

但这也许对你有用。 添加您的 CustomEventIds

public static class CustomEventIds { public const int Debug = 100; public const int Information = 101; public const int Warning = 102; public const int Error = 103; public const int Critical = 104; }

和:

_logger.LogInformation(CustomEventIds.Debug, "Starting to do something with input: {0}", "test");
    

0
投票
您遇到的错误消息“无法找到源应用程序中事件 ID xxxx 的描述”通常是在用于日志记录的事件源未在运行应用程序的系统上正确注册时出现。

在 ASP.NET Core 中使用 AddEventLog() 时,您需要确保事件源在托管应用程序的计算机上正确注册。此注册通常需要管理权限。

以下是注册事件源的方法:

以管理员身份运行:注册事件源时,请确保您的应用程序正在以管理权限运行。这是更改 Windows 事件日志所必需的。

注册事件源:您可以使用 EventCreate 等命令行实用程序注册事件源。使用管理权限打开命令提示符并执行以下命令:

EventCreate /ID [EventID] /L [LogName] /T [Type] /SO [SourceName] /D [Description]
替换占位符:

[EventID]:您要记录的事件的 ID(例如 6666)。

[LogName]:将记录事件的事件日志的名称(例如应用程序)。

[类型]:事件的类型(例如错误、警告、信息)。

[SourceName]:您要注册的事件源的名称(例如应用程序)。

[描述]:事件的描述。

验证注册:注册事件源后,重新启动应用程序并再次尝试记录。错误消息不应再出现,并且事件应记录到指定的事件日志中。

需要注意的是,事件源注册是每台机器的一次性过程。注册后,您可以使用该源从同一台计算机上的任何应用程序记录事件。

确保将占位符替换为适合您的应用程序需求的实际值。另外,请确保事件源名称与您在应用程序中使用的事件源名称匹配(AddEventLog() 调用)。

© www.soinside.com 2019 - 2024. All rights reserved.