C# EventLog获取Windows日志进行查询设置多个EventLogQuery查询条件

cs 复制代码
public void initMonitorEventLog()
{
    EventLogSession session = new EventLogSession();
    EventLogQuery query = new EventLogQuery("Security", PathType.LogName,   "*[System/EventID=4663]") 
    {
        TolerateQueryErrors = true,
        Session = session
    };

    EventLogWatcher logWatcher = new EventLogWatcher(query);

    logWatcher.EventRecordWritten += new    EventHandler<EventRecordWrittenEventArgs>(LogWatcher_EventRecordWritten);

    try
    {
        logWatcher.Enabled = true;
    }
    catch (EventLogException ex)
    {
        Console.WriteLine(ex.Message);
        Console.ReadLine();
    }    
}
cs 复制代码
private void LogWatcher_EventRecordWritten(object sender, EventRecordWrittenEventArgs e)
{
    EventRecord eventRecord = e.EventRecord;
    var time = e.EventRecord.TimeCreated;
    var id = e.EventRecord.Id;
    var logname = e.EventRecord.LogName;
    var level = e.EventRecord.Level;
    var task = e.EventRecord.TaskDisplayName;
    var opCode = e.EventRecord.OpcodeDisplayName;
    var machineName = e.EventRecord.MachineName;
    string providerName = eventRecord.ProviderName;
    eventRecord.ToXml();
    Console.WriteLine(eventRecord.FormatDescription());
    //Console.WriteLine($@"{time}, {id}, {logname}, {level}, {task}, {opCode}, {machineName},{providerName}");
}

其中,EventLogQuery构造函数的第三个参数是Windows日志的查询筛选条件。我在网上查想要筛选监视多个EventID的情况,按照XPath的语法写,一直都没办法写对。后面受到外国博主的启发,在下图的Windows日志里面设置筛选条件,然后切换XML的视图,能看到自动生成的查询条件,复制到代码里就行了。

cs 复制代码
*[System[(EventID=4663 or EventID=5142 or EventID=5144)]]

就是这个条件,复制到代码里就搞定了。

相关推荐
上单带刀不带妹1 小时前
手写 Vue 中虚拟 DOM 到真实 DOM 的完整过程
开发语言·前端·javascript·vue.js·前端框架
-凌凌漆-1 小时前
【Qt】QStringLiteral 介绍
开发语言·qt
程序员爱钓鱼1 小时前
Go语言项目工程化 — 常见开发工具与 CI/CD 支持
开发语言·后端·golang·gin
军训猫猫头2 小时前
1.如何对多个控件进行高效的绑定 C#例子 WPF例子
开发语言·算法·c#·.net
真的想上岸啊2 小时前
学习C++、QT---18(C++ 记事本项目的stylesheet)
开发语言·c++·学习
明天好,会的2 小时前
跨平台ZeroMQ:在Rust中使用zmq库的完整指南
开发语言·后端·rust
丁劲犇3 小时前
用 Turbo Vision 2 为 Qt 6 控制台应用创建 TUI 字符 MainFrame
开发语言·c++·qt·tui·字符界面·curse
旷世奇才李先生3 小时前
Next.js 安装使用教程
开发语言·javascript·ecmascript
charlie1145141914 小时前
深入理解Qt的SetWindowsFlags函数
开发语言·c++·qt·原理分析
likeGhee5 小时前
python缓存装饰器实现方案
开发语言·python·缓存