如何在EventViewer中捕获EventSource.WriteEvent并查看自定义事件?
如何在Event Viewer中捕获自定义EventSource事件
嘿,我来帮你搞定这个问题!首先咱们先修正代码里的一个小错误,然后一步步教你怎么在Event Viewer里看到这些事件。
第一步:修复你的EventSource代码
你当前的WriteEvent调用少传了关键的事件ID参数,这会导致事件无法正确输出。修改后的代码应该是这样的:
using System.Diagnostics.Tracing; using System.IO; [EventSource(Name = "MyProject-Foo")] class FooEventWriter : EventSource { // 静态实例,方便全局调用 public static readonly FooEventWriter Instance = new FooEventWriter(); [Event(1, Level = EventLevel.Error, Message = "Failed to do foo operation. Error: {0}")] public void WriteEventWhenFooErrorOccured(string errorMessage) { if (IsEnabled()) { // 第一个参数必须是事件ID(对应[Event(1,...)]里的1),后面才是消息参数 WriteEvent(1, errorMessage); } } // 用于生成事件清单的辅助方法 public static void GenerateManifest() { var manifestContent = EventSource.GenerateManifest(typeof(FooEventWriter), Directory.GetCurrentDirectory()); File.WriteAllText("MyProject-Foo.man", manifestContent); } }
使用的时候,记得通过静态实例调用方法:
FooEventWriter.Instance.WriteEventWhenFooErrorOccured("测试错误信息");
第二步:生成并注册事件清单
Windows需要通过**事件清单(Manifest)**识别你的自定义EventSource,所以得先生成并注册它:
- 生成清单文件:调用上面的
GenerateManifest()方法,会在程序目录下生成MyProject-Foo.man文件。 - 注册清单:以管理员身份打开命令提示符,切换到清单所在目录,运行以下命令:
如果之后需要卸载这个事件源,用命令:wevtutil im MyProject-Foo.manwevtutil um MyProject-Foo.man
第三步:在Event Viewer中查看事件
完成注册后,就可以查看你的自定义事件了:
- 打开Event Viewer:按下
Win+R输入eventvwr回车。 - 导航到Applications and Services Logs,找到你的事件源名称
MyProject-Foo(如果没看到,重启Event Viewer或者触发一次事件试试)。 - 当你的程序触发错误事件后,这个日志里就会出现对应的条目,双击可以查看详细信息,包括你传入的错误消息。
额外提示
- 必须用管理员权限注册清单,否则会提示权限不足。
- 如果事件没有立即显示,尝试重启Event Viewer或者重新触发事件。
内容的提问来源于stack exchange,提问作者Romz
相关产品推荐
相关产品推荐

