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 I​Logger 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 来记录日志

在 ASP.NET Core 应用程序中禁用 Quartz.Net 的调试日志记录

[Asp.Net Core]ActionFilter做日志

ASP.NET Core使用NLog记录日志

Asp.net core 使用log4net作为日志组件,记录日志到本地。