使用C#實(shí)現(xiàn)寫入系統(tǒng)日志
因?yàn)槲也幌胧褂米约簩懳募?,我的軟件是綠色的,所以把日志寫到 Windows 日志。
首先告訴大家什么是系統(tǒng)日志,請(qǐng)看下面

如果需要寫日志,需要管理員權(quán)限,如果沒(méi)有權(quán)限會(huì)出現(xiàn)下面異常
System.Security.SecurityException:“未找到源,但未能搜索某些或全部事件日志。 不可訪問(wèn)的日志: Security
需要判斷當(dāng)前是否已經(jīng)存在日志,下面我來(lái)創(chuàng)建一個(gè)事件叫 “德熙”
if (EventLog.SourceExists("德熙"))
{
EventLog.CreateEventSource("德熙", "Application");
}
這里的 Application 就是寫到哪個(gè),一般都是選 Application ,可以從圖片看到系統(tǒng)的有應(yīng)用程序、安全、Setup、系統(tǒng)幾個(gè)日志,程序一般都是寫到程序
寫日志
寫日志就不用管理權(quán)限
寫入可以使用 WriteEntry ,需要傳入寫入的日志和內(nèi)容
EventLog.WriteEntry("德熙", "有個(gè)不愿告訴你名稱的程序在這里寫字符串");
這個(gè)方法還有幾個(gè)重載,可以傳入日志類型,是成功、失敗還是其他。還可以傳入 id ,通過(guò)id 可以找到為什么需要寫日志,不過(guò)需要在自己定義,還可以添加附件,于是我就不需要自己寫文件日志。
另外給大家附上一個(gè)完整例子
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
namespace ConsoleApp
{
/// <summary>
/// 系統(tǒng)日志
/// </summary>
public class PackSystemEventLog
{
/// <summary>
/// 錯(cuò)誤信息
/// </summary>
private static string ErrorInfo { get; set; }
/// <summary>
/// 創(chuàng)建系統(tǒng)事件日志分類
/// </summary>
/// <param name="eventSourceName">注冊(cè)事件源(比如說(shuō)這個(gè)日志來(lái)源于某一個(gè)應(yīng)用程序)</param>
/// <param name="logName">日志名稱(事件列表顯示的名稱)</param>
/// <returns></returns>
public static bool CreateSystemEventLogCategory(string eventSourceName, string logName)
{
bool createResult = false;
try
{
if (!EventLog.SourceExists(eventSourceName))
{
EventLog.CreateEventSource(eventSourceName, logName);
}
createResult = true;
}
catch (Exception ex)
{
createResult = false;
ErrorInfo = ex.Message;
}
return createResult;
}
/// <summary>
/// 刪除系統(tǒng)事件日志分類
/// </summary>
/// <param name="eventSource">EventName事件源</param>
/// <returns></returns>
public static bool RemoveSystemEventSourceCategory(string eventSource)
{
bool createResult = false;
try
{
if (EventLog.SourceExists(eventSource))
{
EventLog.DeleteEventSource(eventSource, ".");
}
createResult = true;
}
catch (Exception ex)
{
createResult = false;
ErrorInfo = ex.Message;
}
return createResult;
}
/// <summary>
/// 向系統(tǒng)日志中寫入日志
/// </summary>
/// <param name="eventSource">事件源</param>
/// <param name="msg">寫入日志信息</param>
/// <param name="type">日志文本分類(警告、信息、錯(cuò)誤)</param>
/// <returns></returns>
public static bool WriteSystemEventLog(string eventSource, string msg, EventLogEntryType type)
{
bool writeResult = false;
try
{
if (!EventLog.SourceExists(eventSource))
{
writeResult = false;
ErrorInfo = "日志分類不存在!";
}
else
{
EventLog.WriteEntry(eventSource, msg, type);
writeResult = true;
}
}
catch (Exception ex)
{
writeResult = false;
ErrorInfo = ex.Message;
}
return writeResult;
}
/// <summary>
/// 刪除事件源中l(wèi)ogName(好像刪除了所有的該分類的日志)
/// </summary>
/// <param name="eventSource"></param>
/// <param name="logName"></param>
/// <returns></returns>
public static bool RemoveSystemEventLog(string eventSource, string logName)
{
bool removeResult = false;
try
{
if (!EventLog.SourceExists(eventSource))
{
removeResult = false;
ErrorInfo = "日志分類不存在!";
}
else
{
EventLog.Delete(logName);
removeResult = true;
}
}
catch (Exception ex)
{
removeResult = false;
ErrorInfo = ex.Message;
}
return removeResult;
}
/// <summary>
/// 獲取錯(cuò)誤信息
/// </summary>
/// <returns></returns>
public static string GetErrorMessage()
{
return ErrorInfo;
}
}
}
相關(guān)文章
C#實(shí)現(xiàn)多線程的同步方法實(shí)例分析
這篇文章主要介紹了C#實(shí)現(xiàn)多線程的同步方法,實(shí)例分析了C#線程同步的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04
C#中嵌入SQLite數(shù)據(jù)庫(kù)的簡(jiǎn)單方法
本文給大家介紹的是C#中嵌入SQLite數(shù)據(jù)庫(kù)的簡(jiǎn)單方法,十分的方便也很實(shí)用,有需要的小伙伴可以參考下。2015-06-06
C#生成單頁(yè)靜態(tài)頁(yè)簡(jiǎn)單實(shí)例
這篇文章主要介紹了C#生成單頁(yè)靜態(tài)頁(yè)簡(jiǎn)單實(shí)例,是一個(gè)非常實(shí)用的技巧,需要的朋友可以參考下2014-10-10
C#連接SQL?Sever數(shù)據(jù)庫(kù)詳細(xì)圖文教程
C#是Microsoft公司為.NET Framework推出的重量級(jí)語(yǔ)言,和它搭配最完美的數(shù)據(jù)庫(kù)無(wú)疑就是Microsoft SQL Server了,下面這篇文章主要給大家介紹了關(guān)于C#連接SQL?Sever數(shù)據(jù)庫(kù)的詳細(xì)圖文教程,需要的朋友可以參考下2023-06-06
基于C#實(shí)現(xiàn)語(yǔ)音預(yù)處理
無(wú)論是在音視頻錄制系統(tǒng),還是音視頻通話系統(tǒng)或視頻會(huì)議系統(tǒng)中,對(duì)從麥克風(fēng)采集到的說(shuō)話的聲音數(shù)據(jù)進(jìn)行預(yù)處理,都是是非常必要的,下面就跟隨小編一起來(lái)學(xué)習(xí)一下如何使用C#實(shí)現(xiàn)語(yǔ)音預(yù)處理吧2025-06-06
unity自帶尋路(導(dǎo)航)系統(tǒng) Nav Mesh導(dǎo)航網(wǎng)格
這篇文章主要為大家詳細(xì)介紹了unity自帶尋路(導(dǎo)航)系統(tǒng),Nav Mesh導(dǎo)航網(wǎng)格,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11
C#實(shí)現(xiàn)圖表中鼠標(biāo)移動(dòng)并顯示數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)圖表中鼠標(biāo)移動(dòng)并顯示數(shù)據(jù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02

