C#查看/写入日志到Windows事件查看器的操作方法

 更新时间:2024年09月04日 10:04:44   作者:△曉風殘月〆  
Windows 操作系统将与计算机的系统性能、应用程序和安全方面相关的每个事件记录在 C:\WINDOWS\system32\winevt 的日志中,事件查看器从这些原始事件日志中读取信息,然后以可读格式呈现信息,本文介绍了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;
      }
  }

删除日志

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

以上就是C#查看/写入日志到Windows事件查看器的操作方法的详细内容,更多关于C#查看/写入日志到Windows的资料请关注脚本之家其它相关文章!

相关文章

  • C#遍历DataSet控件实例总结

    C#遍历DataSet控件实例总结

    这篇文章主要介绍了C#遍历DataSet控件的用法,以实例形式总结归纳了常见的遍历方法,具有一定的参考学习价值,需要的朋友可以参考下
    2014-10-10
  • C#中richtextbox使用方法详解

    C#中richtextbox使用方法详解

    这篇文章主要介绍了C#中richtextbox使用方法,分析较为详尽,需要的朋友可以参考下
    2014-07-07
  • DataTables List互相转换的实现类示例

    DataTables List互相转换的实现类示例

    这篇文章主要介绍了将DataTable转换为List,将List转换为DataTable的实现类实例方法,大家参考使用吧
    2013-11-11
  • C#实现的优酷真实视频地址解析功能(2014新算法)

    C#实现的优酷真实视频地址解析功能(2014新算法)

    这篇文章主要介绍了C#实现的优酷真实视频地址解析功能(2014新算法),本文在当前环境下是有效的,因为优酷之前更新了算法,需要的朋友可以参考下
    2014-10-10
  • implicit关键字做自定义类型隐式转换的方法

    implicit关键字做自定义类型隐式转换的方法

    implicit 关键字用于声明隐式的用户定义类型转换运算符。如果转换过程可以确保不会造成数据丢失,则可使用该关键字在用户定义类型和其他类型之间进行隐式转换,这篇文章就给大家详细介绍implicit关键字做自定义类型隐式转换的方法,需要的朋友可以参考下
    2015-08-08
  • C#实现拼图小游戏

    C#实现拼图小游戏

    这篇文章主要为大家详细介绍了C#实现拼图小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • C#实现绘制浮雕图片效果实例

    C#实现绘制浮雕图片效果实例

    这篇文章主要介绍了C#实现绘制浮雕图片效果实例,是C#程序设计中非常实用的一个功能,需要的朋友可以参考下
    2014-08-08
  • C#中常使用进度条的代码

    C#中常使用进度条的代码

    C#中常使用进度条的代码...
    2007-03-03
  • 用 C# Winform做出全透明的磨砂玻璃窗体效果代码

    用 C# Winform做出全透明的磨砂玻璃窗体效果代码

    就是一个简单的例子, 调用系统的 dwm 去重绘窗口. 只能在 Vista 和 7 之后才可以, 并且要确保已经开启主题服务等等, 总之不是非常实用, 好玩而已
    2011-05-05
  • C#中使用资源的方法分析

    C#中使用资源的方法分析

    这篇文章主要介绍了C#中使用资源的方法,较为详细的对比分析了C#中使用资源的几种常用方法,非常具有实用价值,需要的朋友可以参考下
    2014-12-12

最新评论