C#EventViewer日志解析
我负责解析转发的EventViewer(evt)日志(Windows 7?)。为此,我使用LogParser 2.2在日志上运行一个查询,取出特定的EventID并将其写入CSV文件。然而,我正在考虑用它来代替 我在这些evt上执行的查询包括一个“字符串”列,该列输出一堆垃圾,通常采用以下格式:| Username | Usergroup |。。。但这并不一致。我想要的是一种一致的方式来获取这些事件的用户名,并过滤掉无用的数据。问题是我不理解输出的格式。我想知道这些事件是否有标准格式,或者这是我工作中的自定义格式?我现在使用的方法基本上是查找已知的用户组,并检查左侧的潜在用户名(跳过“LOCALS SERVICE”、“NETWORK SERVICE”、“-”和其他一些关键字)。我使用这种方法的问题是,我不知道所有的用户组,而且我可以得到用户名的误报 以下是我正在关注的一些问题:C#EventViewer日志解析,c#,logging,event-viewer,C#,Logging,Event Viewer,我负责解析转发的EventViewer(evt)日志(Windows 7?)。为此,我使用LogParser 2.2在日志上运行一个查询,取出特定的EventID并将其写入CSV文件。然而,我正在考虑用它来代替 我在这些evt上执行的查询包括一个“字符串”列,该列输出一堆垃圾,通常采用以下格式:| Username | Usergroup |。。。但这并不一致。我想要的是一种一致的方式来获取这些事件的用户名,并过滤掉无用的数据。问题是我不理解输出的格式。我想知道这些事件是否有标准格式,或者这是我
最后,我仔细查看了evt文件,发现它们有一套XML模式。“Strings”实际上不是一个元素,而是EventData子数据元素的关联值。我所做的只是查看每个EventID的模式,并在每个事件类型中找到用户名的深度 我认为是字符串[5](TargetUserName)用于登录/注销,字符串[0]用于其他一些,字符串[1]用于其他一些
<EventData>
<Data Name="SubjectUserSid">S-1-5-18</Data>
<Data Name="SubjectUserName">XXX-PC$</Data>
<Data Name="SubjectDomainName">WORKGROUP</Data>
<Data Name="SubjectLogonId">0x3e7</Data>
<Data Name="TargetUserSid">S-1-5-18</Data>
<Data Name="TargetUserName">SYSTEM</Data>
<Data Name="TargetDomainName">NT AUTHORITY</Data>
<Data Name="TargetLogonId">0x3e7</Data>
...
</EventData>
S-1-5-18
XXX-PC美元
工作组
0x3e7
S-1-5-18
系统
新界管理局
0x3e7
...
我最终从日志解析器切换到EventViewerReader。这让我可以按名称抓取XML“字符串”。
<EventData>
<Data Name="SubjectUserSid">S-1-5-18</Data>
<Data Name="SubjectUserName">XXX-PC$</Data>
<Data Name="SubjectDomainName">WORKGROUP</Data>
<Data Name="SubjectLogonId">0x3e7</Data>
<Data Name="TargetUserSid">S-1-5-18</Data>
<Data Name="TargetUserName">SYSTEM</Data>
<Data Name="TargetDomainName">NT AUTHORITY</Data>
<Data Name="TargetLogonId">0x3e7</Data>
...
</EventData>