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)]]

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

相关推荐
net3m334 分钟前
雅特力单片机用串口USART_INT_TDE中断比用USART_INT_TRAC的 发送效率要高
java·开发语言·算法
爱打代码的小林7 分钟前
python基础(逻辑回归例题)
开发语言·python·逻辑回归
laocooon52385788620 分钟前
C#二次开发中简单块的定义与应用
android·数据库·c#
一过菜只因21 分钟前
JavaWeb后端(spring--boot)
java·开发语言
五仁火烧26 分钟前
安装rust开发环境
开发语言·后端·rust
Yue丶越32 分钟前
【C语言】动态内存管理
c语言·开发语言
Edward1111111133 分钟前
普通java项目转为maven项目 J文件后缀.java变C文件
java·开发语言·maven
赵谨言34 分钟前
基于OpenCV的图像梯度与边缘检测研究
大数据·开发语言·经验分享·python
YJlio35 分钟前
BgInfo 学习笔记(11.5):多种输出方式(壁纸 / 剪贴板 / 文件)与“更新其他桌面”实战
笔记·学习·c#
Zhen (Evan) Wang36 分钟前
.NET 6 API使用Serilog APM
c#·.net