C#查看/写入日志到Windows事件查看器的操作方法
Windows事件日志
Windows 操作系统将与计算机的系统性能、应用程序和安全方面相关的每个事件记录在 C:\WINDOWS\system32\winevt 的日志中。
事件查看器从这些原始事件日志中读取信息,然后以可读格式呈现信息。
打开Windows事件查看器的方法是
1、运行输入eventvwr
2、Windows+X打开的超级菜单中选择事件查看器。
3、桌面计算机图标右键选择【管理】,在计算机管理中打开【事件查看器】
事件查看器打开后显示如下:
有三个默认事件日志:应用程序、系统和安全。 安全日志(只读的)。
注意:事件是跟注册表关联起来的,所以推荐以管理员权限运行,否则有些类别下的日志无法读取/写入/删除。
像平常我们开发的程序如果想更方便的查找错误,除了本地日志外,还可以将日志写入到Windows事件日志中的【应用程序和服务日志】类别下,可以方便我们快速查找问题。
EventLog类
在C#中操作Windows事件日志主要使用EventLog类,EventLog类内部使用了ReadEventLogW/ReportEventW等win32 api函数。
在.Net Framework中,直接使用System.Diagnostics.EventLog类即可,
在.NET Core项目中,需要引用System.Diagnostics.EventLog包
EventLog类提供了实例化版本的方法和静态方法两种,类似FileInfo和FIle类。
本文以EventLog类的静态方法进行演示。
获取日志名字
//获取所有事件日志
var logs = EventLog.GetEventLogs();
foreach (var item in logs)
{
//输出事件日志的名字(显示名字[日志名字])
//日志名字是用于读取/写入时的名字
Console.WriteLine(item.LogDisplayName + $"[{item.Log}]");
}运行输出如下
获取日志下的单个记录
这里我们以Visual Studio日志为例,输出Visual Studio日志下的所有记录。
static void Main(string[] args)
{
PrintLogClass();
PrintLogEntry("Visual Studio");
}
static void PrintLogEntry(string logName)
{
//获取所有事件日志
var logs = EventLog.GetEventLogs();
foreach (var item in logs)
{
if(item.LogDisplayName == logName)
{
foreach (EventLogEntry entry in item.Entries)
{
Console.WriteLine($"级别:{entry.EntryType}");
Console.WriteLine($"创建时间:{entry.TimeGenerated}");
Console.WriteLine($"来源:{entry.Source}");
Console.WriteLine($"事件ID:{entry.InstanceId}");
Console.WriteLine($"日志内容:{entry.Message}");
Console.WriteLine();
}
}
}
}运行结果如下:
创建日志
写入记录到系统日志下
这里以【应用程序】日志为例,操作如下:
//需要先注册一个来源,跟日志绑定
if(!EventLog.SourceExists("MyApplicationLogSource"))
{
EventLog.CreateEventSource("MyApplicationLogSource", "Application");
}
EventLog.WriteEntry("MyApplicationLogSource", "测试日志内容",EventLogEntryType.Warning,100010);运行后到事件查看器查看写入的日志
写入记录到自定义日志类别下
//创建来源并跟日志(MyLog)绑定
if (!EventLog.SourceExists("MySource"))
{
EventLog.CreateEventSource("MySource", "MyLog");
}
//写入记录到MyLog下
EventLog.WriteEntry("MySource", "你可以指定日志内容", EventLogEntryType.Warning, 10010);运行后,可以看到增加了一个MyLog日志,并增加了一条类型为警告的记录
清除日志下的所有记录
//获取所有事件日志
var logs = EventLog.GetEventLogs();
foreach (var item in logs)
{
if (item.LogDisplayName == logName)
{
//清除所有记录
item.Clear();
break;
}
}上一篇:C#利用ms office实现office转pdf的示例代码
栏 目:C#教程
本文标题:C#查看/写入日志到Windows事件查看器的操作方法
本文地址:https://zz.feitang.co/ruanjianbiancheng/1283.html
您可能感兴趣的文章
- 11-29C# 中的委托与事件机制详解
- 11-29C#中基数排序算法的原理及实现
- 11-29C#中计数排序算法的原理及实现
- 11-29C#实现线性搜索算法
- 11-29C#实现希尔排序算法的实践
- 11-29C#实现桶排序算法的示例代码
- 11-29C#实现广度优先搜索的实例代码
- 11-29C#中实现深度优先搜索
- 11-29C# 变量作用域常用说明小结
- 11-29详解C#中有趣的 SourceGenerator生成器


阅读排行
推荐教程
- 11-29C#自定义控件指示灯效果
- 11-29C#中计数排序算法的原理及实现
- 11-29C#解决Excel边框样式无法复制及格式刷功能
- 11-29C#实现线性搜索算法
- 11-29C#删除Word文档中的段落的方法示例
- 11-29C# System.Linq提供类似SQL语法的高效查询操作
- 11-29C#中基数排序算法的原理及实现
- 11-29C# WPF中实现图表生成的五种方式
- 11-29C#利用ms office实现office转pdf的示例代码
- 11-29C#实现身份证实名认证接口的示例代码











