如何使用 .net core 的 ILoggerFactory 写入自定义事件源?有没有办法指定来源?

2023-12-24

我正在尝试写入 .netcore/c# 中的自定义事件源,但尚未找到指定 .net core 记录器对象的目标源的方法。在这种情况下,我想写入“我的事件日志”而不是应用程序日志。下面的代码成功写入应用程序日志,但我想将其指向“我的事件日志”事件源。

if (!EventLog.SourceExists("My Event Log"))
{
    EventLog.CreateEventSource("My Event Log", "My Program");
}

ILoggerFactory loggerFactory = new LoggerFactory()
        .AddConsole()
        .AddDebug()
        .AddEventLog();

ILogger logger = loggerFactory.CreateLogger<Program>();
logger.LogInformation("DAILY LOAD starting...");

下面的代码和说明使我的 .NETCore/C# 控制台应用程序成功写入事件查看器中的“自定义应用程序日志”没有事件 ID 描述错误 (see 问题 #1 修复如果您遇到此问题)。

//libraries needed..
//using Microsoft.Extensions.Logging;
//using Microsoft.Extensions.Logging.EventLog;

string _sourceName = "My Program"; //source program name
string _logName = "My Event Log"; //new event log or targeted event log name

//if custom event log does not exist, create it
if (!EventLog.SourceExists(_logName))
{
    //event log creates new app log and associates program, "My Program", with new log, "My Event Log"
    EventLog.CreateEventSource(_sourceName, _logName);
}

EventLogSettings myEventLogSettings = new EventLogSettings
    {
        SourceName = _sourceName,
        LogName = _logName
    };

ILoggerFactory loggerFactory = new LoggerFactory()
            .AddConsole()
            .AddDebug()
            .AddEventLog(myEventLogSettings);

ILogger logger = loggerFactory.CreateLogger<Program>();
logger.LogInformation(1000, "DAILY LOAD starting...");

NOTE #1:如果您正在更改现有源程序的目标日志...或者换句话说,如果您正在重新指向已写入事件日志的程序,则需要重新启动才能注册。如果日志是新创建的,则写入成功。请参阅此线程以获取更多信息:Windows 事件日志 - 如何注册事件源? https://stackoverflow.com/questions/2667248/windows-event-log-how-to-register-an-event-source

ISSUE #1:当您打开事件查看器查看自定义应用程序日志的第一个事件时,你会发现你的事件被埋在错误信息 https://i.stack.imgur.com/PLjvD.png.

无法找到源“我的程序”中事件 ID 0 的描述。您的本地计算机上未安装引发此事件的组件,或者安装已损坏。您可以在本地计算机上安装或修复该组件。 如果事件源自另一台计算机,则显示信息必须与事件一起保存。事件中包含以下信息: 我的程序 每日加载开始...消息资源存在,但在字符串/消息表中找不到该消息

问题 #1 修复:新的应用程序日志引用不存在的消息表文件,或者传递的 EventId 不在消息表中。解决此问题的最简单方法是让日志引用现有的消息表文件(例如 .NET 运行时)并向其传递记录的 EventId(我使用 1000)。这需要更改注册表,步骤如下(文章供参考及截图) https://www.jitbit.com/alexblog/266-writing-to-an-event-log-from-net-without-the-description-for-event-id-nonsense/:

  1. 打开注册表
  2. 导航到计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog
  3. 单击新事件日志的文件夹。在本例中为“我的事件日志”。
  4. 在文件夹中创建新字符串。

    值名称 =“EventMessageFile”
    值数据 =“C:\Windows\System32\mscoree.dll”

重要的: the 价值数据上面的路径引用现有的.NET运行时消息表,如果您愿意,您可以引用不同的消息表。由于 .NET 运行时消息表的 EventID 不等于 0,因此我继续收到相同的错误。一旦我将要传递的 eventId 更改为 .NET 运行时消息表中的现有值(在本例中为 1000),它就会按预期工作,没有错误消息!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 .net core 的 ILoggerFactory 写入自定义事件源?有没有办法指定来源? 的相关文章

随机推荐

  • 用于图像分割的张量流的 sigmoid_cross_entropy 损失函数

    我试图理解什么是sigmoid cross entropy损失函数对于图像分割神经网络的作用 这是相关的 Tensorflow 源码code https github com tensorflow tensorflow blob 600ca
  • 生产环境中显示开发异常

    我知道这是一个很大的 不 并且在我的网站上线时不应该显示开发人员错误页面 我该怎么做才能确保开发环境错误消息不会出现在生产中 为什么会出现这些 我以为在生产模式下它默认是关闭的 我错过了一个设置吗 Note 这是在共享服务器上 我使用的是a
  • ArangoDB - 如何在图遍历中执行计算?

    我有一个简单的图表来跟踪我借钱给的人 所以图表看起来像这样 userB owes to amount 200 gt userA userC owes to amount 150 gt userA 等等 假设您需要使用图形遍历来找出每个用户欠
  • 控件不显示是否在后台线程上运行(c# winform)

    我有一个表格 复杂形式在代码中 具有多个控件 需要一些时间来加载 因此 我决定放入一个单独的线程中 以减少初始加载时间 除了等待表单上的标签控件 Form1在代码中 最初不显示 就在 Form1 响起之前的一瞬间 所以我的问题是 为什么标签
  • QMimeData 中的 Python 对象

    我正在基于我的自定义模型实现拖放 QTreeView 一切正常 我的树显示数据 启用了拖放 现在最后一步就在我面前 放置和传输拖动的数据 为此 我需要在模型中实现 mimeTypes mimeData 和 dropMimeData 方法 现
  • 将多个canvas转换为html5中的dataURL

    我想加入多个画布来制作一个图像 那么有没有什么方法可以将多于一张画布隐藏起来toDataURL制作单个图像 创建一个函数 该函数接受多个参数 画布元素 将它们放在一个空白画布上 然后返回新制作的画布的 dataurl var getImad
  • Java 中的逻辑表示法

    绝对基本的 Java 问题 我在 Google 上很难找到 以下是什么意思 7 8 0 这相当于写 7 0 8 0 我写了一个快速的 main 来测试这一点 情况似乎确实如此 我只是想确保我没有遗漏任何东西 Nope is 按位和 http
  • Python 应用程序输出到系统日志服务器

    我正在尝试在谷歌上进行一些搜索 每 5 分钟左右循环一次 当它受到攻击时 我希望它将结果推送到系统日志服务器 我对 python 很陌生 所以请原谅我的无知 我已经搜索了很长时间 但找不到我的问题的答案 我打算添加多个查询来查找不同的结果
  • 逻辑数组 - 在赋值 A(I) = B 中,B 和 I 中的元素数量必须相同

    我有三个矩阵 A B和C 当B大于A时 我想用A使该值饱和 它表示I中的元素数量 即 B gt A 必须与A 中的元素数量 我检查了下面 它们是相同的 gt gt A 5 5 5 5 5 5 5 5 5 gt gt B 2 2 2 2 2
  • 尝试将 Django 国家添加到 Django

    我是 django 的新手 我正在尝试安装 django 国家 但遇到了问题 我安装自http pypi python org pypi django countries 1 0 1 http pypi python org pypi dj
  • 在 asp.net mvc 中使用 jQuery 动态删除表行

    我有一个表 可以动态添加和删除行 model AHBReports Models AdjustmentModel using Html BeginForm table Html EditorFor model gt model Adjust
  • 确定运行 .NET 应用程序的系统要求

    如何确定 NET 应用程序的最低系统要求 我希望能够确定应列出的运行应用程序的最低系统要求 RAM CPU 等 该应用程序是用 C 编写的 并使用 NET 3 5 和 DirectX9 这一切都是关于反复试验 在各种设置中运行它以查看它是否
  • 添加 TwilioController 基类继承后,Microsoft Azure MVC 3 Web 角色未启动

    Azure Web 角色 MVC 3 项目 不会以 Twilio 控制器类启动 我有一个托管在 MS Azure 上的 MVC 3 应用程序 它发布到 Azure Web 角色 没有问题 我添加了 Nuget Twilio 和 Twilio
  • Android 向后代码兼容性

    我正在开发一个应用程序 使用 android hardware Camera parameters getSupportedPictureSizes 这仅适用于 SDK 版本 8 我希望与 SDK 4 兼容 所以我这样做了 if Build
  • 属性错误:“模块”对象没有属性“读者”[重复]

    这个问题在这里已经有答案了 我收到错误 AttributeError 模块 对象没有属性 读者 当我运行下面的代码但我不明白为什么 import csv with open test csv as f q csv reader f 您导入了
  • Pod 处于挂起阶段(错误:FailedScheduling:节点与节点选择器不匹配)

    我的其中一个 pod 有问题 它说它处于待处理状态 如果我描述这个 Pod 我会看到以下内容 Events Type Reason Age From Message Normal NotTriggerScaleUp 1m x58 over
  • 使用 Android Studio 3.1 和 gradle 3.1.0 构建项目时出错

    我对这个项目有一个问题 我尝试在将 Android Studio 更新到 3 1 版本后构建它 我也将 gradle 更新到版本 3 1 0 只是 gradle Sync 工作正常 但尝试编译所有项目显示了这个错误 我已经将构建工具和所有库
  • ejabberd MUC 消息历史记录

    我使用 ejabberd XMPP 服务器作为聊天客户端 它还具有群聊功能 我的问题是 当新用户加入群组房间时 他只能收到来自该房间的前 20 条消息 尽管 History size 设置为 200 目前 在客户端 当新用户加入房间时 存在
  • Java 中“易失性”是什么意思?

    We use volatile在我们的一个项目中 维护由不同线程访问的变量的相同副本 我的问题是是否可以使用volatile with static 编译器没有给出任何错误 但我不明白使用两者的原因 如果没有阅读内存模型规范 我建议您阅读h
  • 如何使用 .net core 的 ILoggerFactory 写入自定义事件源?有没有办法指定来源?

    我正在尝试写入 netcore c 中的自定义事件源 但尚未找到指定 net core 记录器对象的目标源的方法 在这种情况下 我想写入 我的事件日志 而不是应用程序日志 下面的代码成功写入应用程序日志 但我想将其指向 我的事件日志 事件源