ASP.Net Core 1 日志记录错误 - 找不到来自源应用程序的事件 ID xxxx 的描述
Posted
技术标签:
【中文标题】ASP.Net Core 1 日志记录错误 - 找不到来自源应用程序的事件 ID xxxx 的描述【英文标题】:ASP.Net Core 1 Logging Error - The description for Event ID xxxx from source Application cannot be found 【发布时间】:2018-02-02 08:03:08 【问题描述】:我想从 ASP.Net Core 应用程序的 Controller 方法写入 Windows 事件日志。
我遇到的问题是,我希望在其中写入日志信息,但我不断收到错误/信息日志:
来自源应用程序的事件 ID xxxx 的描述不能 被发现。未安装引发此事件的组件 在您的本地计算机上或安装已损坏。你可以 在本地计算机上安装或修复组件。
如果事件源自另一台计算机,则显示信息 必须与事件一起保存。
活动中包含以下信息:
My.Fully.Qualified.Namespace.WebApi.Controllers.MyController 错误 发生在方法“MyMethod”中
消息资源存在,但在 字符串/消息表
快速说明一下,在 .Net Core 之前,我一直使用 resolved a similar error by creating the Event Source using Powershell or Command 或正确配置 Microsoft.Practices.EnterpriseLibrary.Logging Application block 或其他第三方库
我使用的方法是:
安装 Nuget 包:Microsoft.Extensions.Logging.Abstractions 和 Microsoft.Extensions.Logging 后,我在 Start Configure 代码块中指定 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;
这是基于official documentation on Logging
我已阅读并尝试过的内容:
Description for event id from source cannot be found IIS error -2147024809 when trying to run .NET CORE application When launching an ASP.NET 5 MVC 6 Web App in IIS 8.5 I get an HTTP500 and an Event 1001 against the HttpPlatformHandler ILogger Interface ASP.NET Core Logging Tutorial – What Still Works and What Changed?【问题讨论】:
我正要建议您需要创建始终用于解决此问题的源,但看到您尝试过,我已使用带有 dotnet 核心的 Serilog 写入事件日志(尚未升级到 2.0 ) 所以如果一切都失败了,你可以尝试一下。 【参考方案1】:我无法在 .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");
【讨论】:
感谢您的回答,但我已经指定了事件ID。您可以参考代码。 如果 OP 能够安装 NuGet 包,则 它 可用。 NuGet 不允许您安装对您的平台不可用的包。 这里的link 表示它在核心中不可用。您可以考虑在运行时调用可以为您执行 EventLogging 的程序集 here以上是关于ASP.Net Core 1 日志记录错误 - 找不到来自源应用程序的事件 ID xxxx 的描述的主要内容,如果未能解决你的问题,请参考以下文章
来自静态类的 ASP.NET Core Web API 日志记录
[翻译] ASP.NET Core 利用 DockerElasticSearchKibana 来记录日志