C#查看/寫入日志到Windows事件查看器的操作方法
Windows事件日志
Windows 操作系統(tǒng)將與計(jì)算機(jī)的系統(tǒng)性能、應(yīng)用程序和安全方面相關(guān)的每個(gè)事件記錄在 C:\WINDOWS\system32\winevt 的日志中。
事件查看器從這些原始事件日志中讀取信息,然后以可讀格式呈現(xiàn)信息。
打開Windows事件查看器的方法是
1、運(yùn)行輸入eventvwr
2、Windows+X打開的超級(jí)菜單中選擇事件查看器。
3、桌面計(jì)算機(jī)圖標(biāo)右鍵選擇【管理】,在計(jì)算機(jī)管理中打開【事件查看器】
事件查看器打開后顯示如下:
有三個(gè)默認(rèn)事件日志:應(yīng)用程序、系統(tǒng)和安全。 安全日志(只讀的)。
注意:事件是跟注冊(cè)表關(guān)聯(lián)起來(lái)的,所以推薦以管理員權(quán)限運(yùn)行,否則有些類別下的日志無(wú)法讀取/寫入/刪除。
像平常我們開發(fā)的程序如果想更方便的查找錯(cuò)誤,除了本地日志外,還可以將日志寫入到Windows事件日志中的【應(yīng)用程序和服務(wù)日志】類別下,可以方便我們快速查找問(wèn)題。
EventLog類
在C#中操作Windows事件日志主要使用EventLog類,EventLog類內(nèi)部使用了ReadEventLogW/ReportEventW等win32 api函數(shù)。
在.Net Framework中,直接使用System.Diagnostics.EventLog類即可,
在.NET Core項(xiàng)目中,需要引用System.Diagnostics.EventLog包
EventLog類提供了實(shí)例化版本的方法和靜態(tài)方法兩種,類似FileInfo和FIle類。
本文以EventLog類的靜態(tài)方法進(jìn)行演示。
獲取日志名字
//獲取所有事件日志 var logs = EventLog.GetEventLogs(); foreach (var item in logs) { //輸出事件日志的名字(顯示名字[日志名字]) //日志名字是用于讀取/寫入時(shí)的名字 Console.WriteLine(item.LogDisplayName + $"[{item.Log}]"); }
運(yùn)行輸出如下
獲取日志下的單個(gè)記錄
這里我們以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($"級(jí)別:{entry.EntryType}"); Console.WriteLine($"創(chuàng)建時(shí)間:{entry.TimeGenerated}"); Console.WriteLine($"來(lái)源:{entry.Source}"); Console.WriteLine($"事件ID:{entry.InstanceId}"); Console.WriteLine($"日志內(nèi)容:{entry.Message}"); Console.WriteLine(); } } } }
運(yùn)行結(jié)果如下:
創(chuàng)建日志
寫入記錄到系統(tǒng)日志下
這里以【應(yīng)用程序】日志為例,操作如下:
//需要先注冊(cè)一個(gè)來(lái)源,跟日志綁定 if(!EventLog.SourceExists("MyApplicationLogSource")) { EventLog.CreateEventSource("MyApplicationLogSource", "Application"); } EventLog.WriteEntry("MyApplicationLogSource", "測(cè)試日志內(nèi)容",EventLogEntryType.Warning,100010);
運(yùn)行后到事件查看器查看寫入的日志
寫入記錄到自定義日志類別下
//創(chuàng)建來(lái)源并跟日志(MyLog)綁定 if (!EventLog.SourceExists("MySource")) { EventLog.CreateEventSource("MySource", "MyLog"); } //寫入記錄到MyLog下 EventLog.WriteEntry("MySource", "你可以指定日志內(nèi)容", EventLogEntryType.Warning, 10010);
運(yùn)行后,可以看到增加了一個(gè)MyLog日志,并增加了一條類型為警告的記錄
清除日志下的所有記錄
//獲取所有事件日志 var logs = EventLog.GetEventLogs(); foreach (var item in logs) { if (item.LogDisplayName == logName) { //清除所有記錄 item.Clear(); break; } }
刪除日志
//刪除日志來(lái)源 EventLog.DeleteEventSource("MySource"); //刪除日志 EventLog.Delete("MyLog");
以上就是C#查看/寫入日志到Windows事件查看器的操作方法的詳細(xì)內(nèi)容,更多關(guān)于C#查看/寫入日志到Windows的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
DataTables List互相轉(zhuǎn)換的實(shí)現(xiàn)類示例
這篇文章主要介紹了將DataTable轉(zhuǎn)換為L(zhǎng)ist,將List轉(zhuǎn)換為DataTable的實(shí)現(xiàn)類實(shí)例方法,大家參考使用吧2013-11-11C#實(shí)現(xiàn)的優(yōu)酷真實(shí)視頻地址解析功能(2014新算法)
這篇文章主要介紹了C#實(shí)現(xiàn)的優(yōu)酷真實(shí)視頻地址解析功能(2014新算法),本文在當(dāng)前環(huán)境下是有效的,因?yàn)閮?yōu)酷之前更新了算法,需要的朋友可以參考下2014-10-10implicit關(guān)鍵字做自定義類型隱式轉(zhuǎn)換的方法
implicit 關(guān)鍵字用于聲明隱式的用戶定義類型轉(zhuǎn)換運(yùn)算符。如果轉(zhuǎn)換過(guò)程可以確保不會(huì)造成數(shù)據(jù)丟失,則可使用該關(guān)鍵字在用戶定義類型和其他類型之間進(jìn)行隱式轉(zhuǎn)換,這篇文章就給大家詳細(xì)介紹implicit關(guān)鍵字做自定義類型隱式轉(zhuǎn)換的方法,需要的朋友可以參考下2015-08-08C#實(shí)現(xiàn)繪制浮雕圖片效果實(shí)例
這篇文章主要介紹了C#實(shí)現(xiàn)繪制浮雕圖片效果實(shí)例,是C#程序設(shè)計(jì)中非常實(shí)用的一個(gè)功能,需要的朋友可以參考下2014-08-08