C#查看/寫(xiě)入日志到Windows事件查看器的操作方法
Windows事件日志
Windows 操作系統(tǒng)將與計(jì)算機(jī)的系統(tǒng)性能、應(yīng)用程序和安全方面相關(guān)的每個(gè)事件記錄在 C:\WINDOWS\system32\winevt 的日志中。
事件查看器從這些原始事件日志中讀取信息,然后以可讀格式呈現(xiàn)信息。
打開(kāi)Windows事件查看器的方法是
1、運(yùn)行輸入eventvwr
2、Windows+X打開(kāi)的超級(jí)菜單中選擇事件查看器。

3、桌面計(jì)算機(jī)圖標(biāo)右鍵選擇【管理】,在計(jì)算機(jī)管理中打開(kāi)【事件查看器】
事件查看器打開(kāi)后顯示如下:

有三個(gè)默認(rèn)事件日志:應(yīng)用程序、系統(tǒng)和安全。 安全日志(只讀的)。
注意:事件是跟注冊(cè)表關(guān)聯(lián)起來(lái)的,所以推薦以管理員權(quán)限運(yùn)行,否則有些類(lèi)別下的日志無(wú)法讀取/寫(xiě)入/刪除。
像平常我們開(kāi)發(fā)的程序如果想更方便的查找錯(cuò)誤,除了本地日志外,還可以將日志寫(xiě)入到Windows事件日志中的【應(yīng)用程序和服務(wù)日志】類(lèi)別下,可以方便我們快速查找問(wèn)題。
EventLog類(lèi)
在C#中操作Windows事件日志主要使用EventLog類(lèi),EventLog類(lèi)內(nèi)部使用了ReadEventLogW/ReportEventW等win32 api函數(shù)。
在.Net Framework中,直接使用System.Diagnostics.EventLog類(lèi)即可,
在.NET Core項(xiàng)目中,需要引用System.Diagnostics.EventLog包
EventLog類(lèi)提供了實(shí)例化版本的方法和靜態(tài)方法兩種,類(lèi)似FileInfo和FIle類(lèi)。
本文以EventLog類(lèi)的靜態(tài)方法進(jìn)行演示。
獲取日志名字
//獲取所有事件日志
var logs = EventLog.GetEventLogs();
foreach (var item in logs)
{
//輸出事件日志的名字(顯示名字[日志名字])
//日志名字是用于讀取/寫(xiě)入時(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)建日志
寫(xiě)入記錄到系統(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)行后到事件查看器查看寫(xiě)入的日志

寫(xiě)入記錄到自定義日志類(lèi)別下
//創(chuàng)建來(lái)源并跟日志(MyLog)綁定
if (!EventLog.SourceExists("MySource"))
{
EventLog.CreateEventSource("MySource", "MyLog");
}
//寫(xiě)入記錄到MyLog下
EventLog.WriteEntry("MySource", "你可以指定日志內(nèi)容", EventLogEntryType.Warning, 10010); 運(yùn)行后,可以看到增加了一個(gè)MyLog日志,并增加了一條類(lèi)型為警告的記錄

清除日志下的所有記錄
//獲取所有事件日志
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#查看/寫(xiě)入日志到Windows事件查看器的操作方法的詳細(xì)內(nèi)容,更多關(guān)于C#查看/寫(xiě)入日志到Windows的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C#服務(wù)端圖片打包下載實(shí)現(xiàn)代碼解析
這篇文章主要介紹了C#服務(wù)端圖片打包下載實(shí)現(xiàn)代碼解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
C#中跨線(xiàn)程訪問(wèn)控件問(wèn)題解決方案分享
這篇文章主要介紹了C#中跨線(xiàn)程訪問(wèn)控件問(wèn)題解決方案,有需要的朋友可以參考一下2013-11-11
Unity?UGUI的PhysicsRaycaster物理射線(xiàn)檢測(cè)組件介紹使用
這篇文章主要介紹了Unity?UGUI的PhysicsRaycaster物理射線(xiàn)檢測(cè)組件的介紹及使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
C#實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
C#微信開(kāi)發(fā)之獲取接口調(diào)用憑據(jù)
本文主要介紹了C#微信開(kāi)發(fā)之接收 / 返回文本消息原理與實(shí)現(xiàn)方法,具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-02-02
C#實(shí)現(xiàn)XOR密碼(異或密碼)的示例代碼
XOR密碼(異或密碼)是一種簡(jiǎn)單的加密算法,它使用異或(XOR)操作來(lái)對(duì)明文和密鑰進(jìn)行加密和解密,本文為大家介紹了C#實(shí)現(xiàn)XOR密碼的相關(guān)知識(shí),希望對(duì)大家有所幫助2024-01-01
C#通過(guò)chrome插件將HTML網(wǎng)頁(yè)轉(zhuǎn)換為PDF
這篇文章主要介紹了C#通過(guò)chrome插件將HTML網(wǎng)頁(yè)轉(zhuǎn)換為PDF,將HTML網(wǎng)頁(yè)內(nèi)容轉(zhuǎn)換為 PDF 格式能方便文檔的后續(xù)打印、存檔和分享等,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下2025-03-03

