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