其他分享
首页 > 其他分享> > CodeGo.net>如何找出EventProperty名称?

CodeGo.net>如何找出EventProperty名称?

作者:互联网

我的C#应用​​程序订阅了Windows事件日志消息:

var subscriptionQuery = new EventLogQuery(Settings.Default.LogPath, PathType.LogName, Settings.Default.LogQuery);
_watcher = new EventLogWatcher(subscriptionQuery);
_watcher.EventRecordWritten += EventLogEventRead;

出现消息时,EventLogEventRead处理程序将重新获取包含事件数据的System.Diagnostics.Eventing.Reader.EventLogRecord对象.此信息包括EventProperty对象的集合.
问题是:EventProperty仅定义一个值,而不定义属性的名称.但是,当我在Windows事件日志查看器中打开同一事件时,它将显示带有名称的属性.
现在的问题是:如何获得事件属性名称?

解决方法:

有两种方法(我知道),但是都涉及解析xml.

EventRecord具有功能ToXml,其中包含一个UserData部分,其中包含该块中的所有值.

另一个选项稍微复杂一点:
创建一个ProviderMetadata,找到描述当前EventRecord的EventMetadata,然后解析Template成员.
此Template成员说明了如何解释值(甚至包括类型),但是它是XML格式.

var meta = new ProviderMetadata(record.ProviderName).Events.Where(evt => evt.Id == eventRecord.Id).FirstOrDefault();

标签:event-log,windows,c,net
来源: https://codeday.me/bug/20191120/2040530.html