【发布时间】:2021-03-18 20:15:19
【问题描述】:
我正在使用以下辅助函数:
public List<EventRecord> GetEvents(DateTime afterTime)
{
var formattedDateTime = $"{afterTime:yyyy-MM-dd}T{afterTime:HH:mm:ss}.000000000Z";
var query = $"*[(System/Provider/@Name='.Net Runtime') and (System/EventID=1000) and (System/TimeCreated/@SystemTime >= '{formattedDateTime}')]";
var queryResult = new EventLogQuery("Application", PathType.LogName, query);
var reader = new EventLogReader(queryResult);
var events = new List<EventRecord>();
while (true)
{
var rec = reader.ReadEvent();
if (rec == null)
{
break;
}
events.Add(rec);
}
return events;
}
此代码几乎可以正常工作,只是查询似乎完全忽略了 TimeCreated。它返回具有给定 ProviderName 和 EventId 的所有事件。我已经尝试了各种不同的方法来让它工作,但无论如何,TimeCreated 都会被忽略。
有人知道我做错了吗?
编辑 1
甚至将查询行替换为:
var query = $"*[System[TimeCreated[@SystemTime >= '{formattedDateTime}']]]";
不起作用。返回所有事件,无论它们是何时创建的。
编辑 2
所以我尝试使用“自定义视图”构建器为我生成 XML 查询,我发现更令人困惑:
所以目前我机器上显示的时间是:下午 2 点 42 分。 24 小时后应该是下午 14:42。
当我使用自定义视图创建查询并选择: 来自:'Events On' 03/18/2021 2:42pm ,它会创建以下内容:
<QueryList>
<Query Id="0" Path="Application">
<Select Path="Application">*[System[Provider[@Name='.NET Runtime'] and (EventID=1000) and TimeCreated[@SystemTime>='2021-03-18T20:42:13.000Z']]] </Select>
</Query>
</QueryList>
为什么在上帝的绿地上将下午 2:42 转换为 20:42?
【问题讨论】: