当前位置: 首页 > article >正文

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类的静态方法进行演示。

获取日志名字

1  //获取所有事件日志
2  var logs = EventLog.GetEventLogs();
3 
4  foreach (var item in logs)
5  {
6      //输出事件日志的名字(显示名字[日志名字])
7      //日志名字是用于读取/写入时的名字
8      Console.WriteLine(item.LogDisplayName + $"[{item.Log}]");
9  }

运行输出如下

获取日志下的单个记录

这里我们以Visual Studio日志为例,输出Visual Studio日志下的所有记录。

 1   static void Main(string[] args)
 2   {
 3       PrintLogClass();
 4 
 5       PrintLogEntry("Visual Studio");
 6   }
 7 
 8   static void PrintLogEntry(string logName)
 9   {
10       //获取所有事件日志
11       var logs = EventLog.GetEventLogs();
12 
13       foreach (var item in logs)
14       {
15           if(item.LogDisplayName == logName)
16           {
17               foreach (EventLogEntry entry in item.Entries)
18               {
19                   Console.WriteLine($"级别:{entry.EntryType}");
20                   Console.WriteLine($"创建时间:{entry.TimeGenerated}");
21                   Console.WriteLine($"来源:{entry.Source}");
22                   Console.WriteLine($"事件ID:{entry.InstanceId}");
23                   Console.WriteLine($"日志内容:{entry.Message}");
24                   Console.WriteLine();
25               }
26           }
27       }
28   }

运行结果如下:

创建日志

写入记录到系统日志下

这里以【应用程序】日志为例,操作如下:

1 //需要先注册一个来源,跟日志绑定
2 if(!EventLog.SourceExists("MyApplicationLogSource"))
3 {
4     EventLog.CreateEventSource("MyApplicationLogSource", "Application");
5 }
6 
7 EventLog.WriteEntry("MyApplicationLogSource", "测试日志内容",EventLogEntryType.Warning,100010);

运行后到事件查看器查看写入的日志

写入记录到自定义日志类别下

1  //创建来源并跟日志(MyLog)绑定
2  if (!EventLog.SourceExists("MySource"))
3  {
4      EventLog.CreateEventSource("MySource", "MyLog");
5  }
6 
7  //写入记录到MyLog下
8  EventLog.WriteEntry("MySource", "你可以指定日志内容", EventLogEntryType.Warning, 10010);   

运行后,可以看到增加了一个MyLog日志,并增加了一条类型为警告的记录

清除日志下的所有记录

 1  //获取所有事件日志
 2  var logs = EventLog.GetEventLogs();
 3 
 4  foreach (var item in logs)
 5  {
 6      if (item.LogDisplayName == logName)
 7      {
 8          //清除所有记录
 9          item.Clear();
10          break;
11      }
12  }

删除日志

1 //删除日志来源
2 EventLog.DeleteEventSource("MySource");
3 //删除日志
4 EventLog.Delete("MyLog");

示例代码(.NET6)


http://www.kler.cn/news/290458.html

相关文章:

  • c++学习笔记(5)
  • .gitignore 修改问题
  • 力扣151.反转字符串中的单词
  • 输电线路分布式故障诊断系统:分布式智慧网络的构建
  • c#笔记5 详解事件的内置类型EventHandler、windows事件在winform中的运用
  • 【IEEE出版 | 往届会后3个月EI检索】第三届IEEE云计算、大数据应用与软件工程国际学术会议 (IEEE-CBASE 2024,10月18-20)
  • 6 - Shell编程之sed与awk编辑器
  • 高级java每日一道面试题-2024年8月28日-框架篇[Spring篇]-你对Spring的事务管理了解多少?
  • Windows bat脚本学习七(从hex文件中获取bin大小)
  • centos 局域网 内部 时间同步 chrony
  • PHP7 的内核结构
  • 河南省第三届职业技能大赛 网站技术(世赛选拔)项目任务书
  • Go 项目中的 GOPROXY 设置
  • 三极管的检测方法与经验
  • Transiting from CUDA to HIP(三)
  • 刘润《关键跃升》读书笔记6
  • Linux基础指令(二)详解
  • 告别PDF格式困扰,2024年PDF转换器推荐
  • 「OC」iOS事件处理流程
  • Elasticsearch之储存原理和优化
  • 部分设计模式(java语言版本)
  • 常见排序方法详解(图示+方法)
  • VBA中类的解读及应用第十五讲:让文本框在激活时改变颜色(上)
  • HarmonyOS开发实战( Beta5版)多线程能力场景化示例最佳实践
  • 虚幻地形高度图生成及测试
  • 【论文分享】MyTEE: Own the Trusted Execution Environment on Embedded Devices 23‘NDSS
  • 使用FFmpeg的AVFilter转换YUV到RGB
  • 别天天看看直播了,你知道如何用jmeter对直播间做压测吗
  • LearnOpenGL学习笔记
  • MySQL复习4