使用事件查看器(图形化界面,最推荐)
这是最直观、最常用的方法,适合大多数用户,特别是排查特定问题时。

如何打开事件查看器
- 方法一(最快): 按下
Win + R键,输入eventvwr.msc,然后按回车。 - 在开始菜单搜索框中输入“事件查看器”(Event Viewer)并打开它。
如何查看日志
事件查看器窗口左侧有一个“日志”窗格,里面包含了不同类型的日志。
-
Windows 日志:这是最核心的日志区域,包含以下几类:
- 应用程序:记录由已安装应用程序生成的错误、警告和信息。
- 安全:记录与安全相关的事件,如登录/注销、账户管理、对象访问、策略更改、特权使用等。排查安全问题,这里是首选。
- 系统:记录 Windows 系统组件驱动程序和组件生成的错误、警告和信息。
- 安装程序:记录软件的安装、卸载和更新操作。
- 转发事件:用于收集来自其他计算机的事件。
-
应用程序和服务日志:记录更具体的应用程序或服务日志,Microsoft、Windows 等厂商的日志。
如何筛选和查找日志
当日志很多时,直接查看会很困难,使用筛选功能可以快速定位问题。

- 在左侧窗格中,选择你想查看的日志(Windows 日志” -> “系统”)。
- 在右侧的“操作”窗格中,点击“筛选当前日志...”。
- 在弹出的窗口中,你可以设置筛选条件:
- 级别:勾选你关心的级别,例如只看“错误”和“警告”,可以忽略大量的“信息”日志。
- 关键字:输入关键词,
dhcp、disk、network等,只显示包含这些关键词的条目。 - 事件来源/日期范围:也可以根据这些条件进行筛选。
- 点击“确定”后,日志列表就会只显示符合条件的内容。
使用 wevtutil 命令(命令行工具)
wevtutil (Windows Event Utility) 是一个功能强大的命令行工具,适合脚本编写或远程管理服务器。
基本语法
wevtutil.exe {qe | gl | el} [选项]
qe(Query Events):查询事件。gl(Get Log):获取日志信息。el(Enum Logs):列出所有可用的日志。
常用命令示例
列出所有日志名称
wevtutil el
这个命令会列出系统中所有日志的完整路径。
查看特定日志的详细信息 查看“系统”日志的基本信息。

wevtutil gl System
查询日志(最常用) 查询“系统”日志中最近5条级别为“错误”的事件。
wevtutil qe System /c:5 /rd:true /f:text
/c:5:显示最近 5 条记录。/rd:true:按时间倒序排列(最新的在前)。/f:text:以纯文本格式输出,方便阅读,如果不加此参数,输出会是 XML 格式。
使用更复杂的查询 查询“应用程序”日志中,在过去24小时内,任何来源产生的、包含关键词 "failed" 的事件。
wevtutil qe Application /q:*[System[TimeCreated[timediff(@SystemTime) <= 86400000]]] and (*[EventData[Data[@Name='param1']='failed']]]*) /f:text
/q:...:这是一个 XPath 查询语句,非常强大但语法复杂。TimeCreated[timediff(@SystemTime) <= 86400000]:筛选最近24小时内(86400秒)的事件。EventData[Data[@Name='param1']='failed']:筛选事件数据中某个参数为 'failed' 的记录,这个例子需要根据实际日志结构调整。
使用 PowerShell(更现代、更强大的脚本工具)
PowerShell 是 Windows 现代化的命令行和脚本环境,提供了更简洁、更强大的对象处理能力。
基本语法
Get-WinEvent [-LogName <日志名>] [-MaxEvents <数量>] [-FilterXPath <XPath查询>] | Format-List
常用命令示例
列出所有日志
Get-WinEvent -ListLog *
这会显示所有日志的详细信息,包括最大大小、保留策略等。
查看“系统”日志中的最近10条错误
Get-WinEvent -LogName System -MaxEvents 10 | Where-Object { $_.LevelDisplayName -eq 'Error' } | Format-List
Get-WinEvent -LogName System:获取“系统”日志。Where-Object { $_.LevelDisplayName -eq 'Error' }:通过管道符 将结果传递给Where-Object,筛选出“级别显示名称”为“错误”的条目。Format-List:将结果格式化为易于阅读的列表。
使用 FilterHashtable 提高性能(推荐) 对于大型日志,使用哈希表筛选比 XPath 更快、更易读。
Get-WinEvent -FilterHashtable @{
LogName = 'Security'
Level = 2 # 2 代表警告,1 代表错误,0 代表信息
StartTime = [datetime]::Today.AddDays(-1) # 查询过去24小时内的
} | Format-List
FilterHashtable:一个包含筛选条件的哈希表。LogName:指定日志名称。Level:指定事件级别(0=信息, 1=错误, 2=警告, 3=详细, 4=分析, 5=调试)。StartTime/EndTime:指定时间范围。
使用 findstr 命令(快速搜索文本)
如果你已经知道日志文件的位置(通常位于 C:\Windows\System32\winevt\Logs\),并且只想快速搜索文本内容,可以使用 findstr。
注意: 此方法直接操作日志文件(.evtx),不如事件查看器或 PowerShell 灵活,但对于快速关键词搜索非常快。
# 搜索系统日志文件中包含 "dhcp" 的所有行 findstr /i "dhcp" C:\Windows\System32\winevt\Logs\System.evtx
/i:表示不区分大小写。
总结与对比
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 事件查看器 | 直观图形界面,功能强大,易于筛选和导出 | 无法直接用于脚本 | 日常排查问题、新手用户、查看特定事件详情 |
| wevtutil | 功能强大,适合命令行和远程管理 | 语法相对复杂,输出为XML时不易读 | 批量处理、服务器管理、编写自动化脚本 |
| PowerShell | 现代化,语法灵活,处理对象能力强,FilterHashtable性能高 | 需要学习PowerShell语法 | 高级用户、系统管理员、编写复杂脚本和数据分析 |
| findstr | 速度极快,语法简单 | 功能单一,只能搜索文本,无法解析日志结构 | 已知日志文件位置,仅需要快速关键词搜索 |
建议:
- 日常使用和初步排查:首选 事件查看器。
- 需要自动化或远程管理:学习使用 PowerShell 或 wevtutil。
- 快速大海捞针:如果知道文件名,可以用 findstr 作为补充。
