开发者

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

开发者 https://www.devze.com 2024-09-05 10:39 出处:网络 作者: △曉風殘月〆
目录Windows事件日志EventLog类获取日志名字获取日志下的单个记录创建日志写入记录到系统日志下写入记录到自定义日志类别下清除日志下的所有记录删除日志Windows事件日志
目录
  • Windows事件日志
  • EventLog类
  • 获取日志名字
  • 获取日志下的单个记录
  • 创建日志
    • 写入记录到系统日志下
    • 写入记录到自定义日志类别下
  • 清除日志下的所有记录
    • 删除日志

      Windows事件日志

      Windows 操作系统将与计算机的系统性能、应用程序和安全方面相关的每个事件记录在 C:\WINDOWS\system32\winevt 的日志中。

      事件查看器从这些原始事件日志中读取信息,然后以可读格式呈现信息。

      打开Windows事件查看器的方法是

      1、运行输入eventvwr

      2、Windows+X打开的超级菜单中选择事件查看器。

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

      3编程客栈、桌面计算机图标右键选择【管理】,在计算机管理中打开【事件查看器】

      事件查看器打开后显示如下:

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

      有三个默认事件日志:应用程序、系统和安全。 安全日志(只读的)。

      注意:事件是跟注册表关联起来的,所以推荐以管理员权限运行,否则有些类别下的日志无法读取/写入/删除。

      像平常我们开发的程序如果想更方便的查找错误,除了本地日志外,还可以将日志写入到Windows事件日志中的【应用js程序和服务日志】类别下,可以方便我们快速查找问题。

      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}]");
        }

      运行输出如下

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

      获取日志下的单个记录

      这里我们以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();
                     }
                 }
             }
         }

      运行结果如下:

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

      创建日志

      写入记录到系统日志下

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

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

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

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

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

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

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

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

      清除日志下的所有记录

        //获取所有事件日志
        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的资料请关注编程客栈(www.devze.com)其它相关文章!

      0

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      关注公众号