【问题标题】:EventLogQuery ignoring TimeCreated criteriaEventLogQuery 忽略 TimeCreated 条件
【发布时间】: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&gt;='2021-03-18T20:42:13.000Z']]] </Select>
  </Query>
</QueryList>

为什么在上帝的绿地上将下午 2:42 转换为 20:42?

【问题讨论】:

    标签: c# event-log


    【解决方案1】:

    显然,您需要将时间转换为 UniversalTime 才能使其正常工作。

    这是一个工作示例:

    public List<EventRecord> GetEvents(DateTime afterTime)
    {
        var formattedDateTime = afterTime.ToUniversalTime().ToString("o");
    
        var query     = $"*[System[Provider[@Name='.NET Runtime'] and (EventID=1000) and 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;
    }
    

    【讨论】:

      猜你喜欢
      • 2011-01-27
      • 2021-11-18
      • 1970-01-01
      • 2022-03-22
      • 2018-07-13
      • 2013-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多