【问题标题】:Cannot associate Event ID in Event Log using Serilog无法使用 Serilog 关联事件日志中的事件 ID
【发布时间】:2018-05-31 03:41:27
【问题描述】:

我将 Serilog 用作 .NET 的库,它为文件、控制台和其他地方提供诊断日志记录。

我的问题是我在代码中声明了一些日志记录事件,但是在查看 Windows 事件查看器时,分配给我的日志的事件 ID 在事件查看器中没有关联。关于如何修改以添加事件 ID 的任何想法?

记录事件代码

public class LoggingEvents
{
    //info
    public const int GENERATE_INDEXPAGE = 2000;
    public const int ADMIN_ACCESS = 2001;
    public const int ON_GET_REGISTRATION = 2002;
    public const int ON_GET_APP_BY_KEY = 2003;
    public const int ON_GET_BY_AIR_ID = 2004;
    public const int ON_GET_USERS = 2005;
    public const int ON_GET_GROUPS = 2006;
    public const int ON_POST_APPLICATION = 2007;

    //warning
    public const int NO_ADMIN_ACCESS = 3000;
    public const int INVALID_AIR_ID = 3001;

    //error
    public const int ERROR_POST_APPLICATION = 4000;
}

【问题讨论】:

    标签: serilog


    【解决方案1】:

    Serilog Windows Event Logger 是开源的。我从来没有做过你要问的事情,但我的回答只是基于查看源代码。如果您有关于如何使用开源库做某事的问题,您所要做的就是查看代码。

    添加事件日志接收器时,您需要做的就是创建一个IEventIdProvider 的实例,然后注册它。

    public class MyEventIdProvider : IEventIdProvider
    {
        public ushort ComputeEventId(LogEvent logEvent)
        {
            //your implementation here
        }
    }
    
    Log.Logger = new LoggerConfiguration()
        .WriteTo.EventLog("Sample App",
                          manageEventSource: true,
                          eventIdProvider: new MyEventIdProvider())
        .CreateLogger();
    

    【讨论】:

    • 您好,如何使用从 app.config 配置的 serilog 注册 EventIdProvider?
    • @Hooch 示例 here 是否让您知道如何开始?
    • 它没有显示如何使用 app.config 中的 eventIdProvider。
    • @Hooch 我明白你的意思。语法很清楚,预计我不知道它会实例化事件 ID 提供程序。我建议您在 Stack Overflow 上提出一个新问题。维护 Serilog 的团队很擅长在这里监控问题。
    【解决方案2】:

    补充@mason 答案,这是您可以从 appsettings.json 配置它的方式:

    {
     "Serilog": {
      "WriteTo": [
        {
          "Name": "EventLog",
          "Args": {
            "source": "your source name",
            "eventIdProvider": "namespace.class, assembly"
          }
        }
      ]
     }
    }
    

    例如

    {
     "Serilog": {
      "WriteTo": [
        {
          "Name": "EventLog",
          "Args": {
            "source": "MyApp",
            "eventIdProvider": "MyApp.MyEventIdProvider, MyApp"
          }
        }
      ]
     }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多