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

时间:2017-08-24 12:25:12

标签: c# asp.net-core event-log

我想从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.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;
        }
    }

这是基于official documentation on Logging

我已阅读并尝试过:

1 个答案:

答案 0 :(得分:1)

我无法在.Net Core 2.0中使用loggerFactory.AddEventLog()。由于Microsoft.Extensions.Logger.EventLog仅存在于.net 4.5.1中,尽管Nuget包可用于2.0.0 here,因此看起来需要将其移植到Core。

enter image description here

但也许这对你有用。 添加您的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");