c# - 无法将事件源重新注册到新的自定义事件日志

标签 c# c#-4.0 logging windows-7 event-log

我使用以下方法创建了一个事件日志源:

if (!EventLog.SourceExists(EventLogSource)) EventLog.CreateEventSource(EventLogSource);

因此每个使用 EventLogSource 的日志条目都进入“应用程序”。然后我希望所有使用 EventLogSource 的条目都进入另一个自定义日志;所以我删除了它们,然后使用新的自定义日志创建了源代码:

try { EventLog.DeleteEventSource(EventLogSource); }
catch { }
try { EventLog.Delete(EventLogName); }
catch { }

...
if (!EventLog.SourceExists(EventLogSource)) EventLog.CreateEventSource(EventLogSource, EventLogName);
while (!EventLog.SourceExists(EventLogSource)) { }

但是当我使用 EventLogSource 登录时,条目仍然进入“Application”而不是 EventLogName。

注意:

我在评论中写了这个,我认为它有助于更​​好地描述我的问题: 在 Windows 事件查看器中,您会看到“Windows 日志”和“应用程序”。树中还有另一个名为“应用程序和服务日志”的节点,我想在其下创建一个自定义日志。我可以成功地做到这一点。问题是以前注册到“应用程序”的事件源不能从“应用程序”中取消注册并在我自己的“MyCustomLog”中重新注册。

最佳答案

Windows 中的事件系统会缓存一些有关源的信息。这意味着如果您删除一个源并重新添加它,它将继续记录到它最初使用的同一日志中。

没有记录在案的方法来强制事件系统清除此缓存。我知道的唯一方法是重新启动机器 - 因此您需要删除源,重新启动,然后重新创建源。

关于c# - 无法将事件源重新注册到新的自定义事件日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12364643/

相关文章:

c# - 重新使用类连接到第二个数据库

c# - EF7 应用程序出现 ASP.NET 5 IIS 500 错误

c# - 当实现接口(interface)的类有自己的属性时,如何使用接口(interface)?

Python:如何为 multiprocessing.Pool 中的进程使用不同的日志文件?

c# - 在 C# 中获取一个范围内的随机持续时间

c# - 如何替换DataGridView中的整行值?

html - 使用图像标签和 CSS 显示本地 HTML 文件的 C# 控件/代码

asp.net - 我想将 "An error occurred object reference not set to an instance of an object while insert and update new record"插入数据库

c# - Log4Net 未在 MaxFileSize 上滚动

sql-server - 如何在 SSIS 中创建日志文件