亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

c#.NET中日志信息寫入Windows日志中解決方案

 更新時間:2007年03月09日 00:00:00   作者:  
1、 目的  
應(yīng)用系統(tǒng)的開發(fā)和維護離不開日志系統(tǒng),選擇一個功能強大的日志系統(tǒng)解決方案是應(yīng)用系統(tǒng)開發(fā)過程中很重要的一部分。在.net環(huán)境下的日志系統(tǒng)解決方案有許多種,log4net是其中的佼佼者。 
在Windows2000及以上操作系統(tǒng)中,有一個Windows日志系統(tǒng),它包括應(yīng)用程序(Application)事件日志、系統(tǒng)(System)日志和安全(Security)日志,事件日志也可以是自定義日志。在.net Framework中也提供了相應(yīng)的類和接口來使用應(yīng)用程序事件日志或者自定義事件日志。使用Windows日志可以使應(yīng)用系統(tǒng)與操作系統(tǒng)更好的結(jié)合,與單純使用自定義的日志系統(tǒng)相比,因為有了操作系統(tǒng)的支持,查詢和管理日志更方便。在實際應(yīng)用中,根據(jù)實際情況,可以選擇一種合適的日志解決方案,也可以自定義日志系統(tǒng)和Windows日志系統(tǒng)兩種日志解決方案同時使用。 
2、 使用Windows日志的方法  
2.1、方法概述  
在.net Framework中提供了一個類EventLog,使用EventLog類可以添加新的事件日志條目或從服務(wù)器事件日志中獲取已有的條目。EventLog類包括一個WriteEntry()方法,可以用它來把一個新的事件寫入到事件日志中。在寫入一個新的條目到事件日志時,是使用特定的事件源(event source)來把條目寫入到特定的事件日志中。 
事件源對于事件日志而言是唯一的。在Windows2000及以上操作系統(tǒng)中,包括一個事件日志:應(yīng)用程序(Application)事件日志,還有系統(tǒng)(System)日志和安全(Security)日志,并且系統(tǒng)允許自定義事件日志。使用EventLog類,可以將日志條目添加到應(yīng)用程序(Application)事件日志中,也可以添加到自定義事件日志中。事件源相當(dāng)于事件日志的下一級目錄,每一條日志條目都必須對應(yīng)一個事件源。EventLog類可以創(chuàng)建一個自定義事件日志,也可以創(chuàng)建一個事件源,事件源可以創(chuàng)建在應(yīng)用程序(Application)事件日志中,也可以創(chuàng)建在自定義事件日志中。Windows日志系統(tǒng)如下圖所示:
為了便于不同應(yīng)用系統(tǒng)之間的日志區(qū)分和查看方便,一般將事件源創(chuàng)建在自定義事件日志中,可以創(chuàng)建多個事件日志,一個事件日志也可以創(chuàng)建多個事件源。
2.2、事件日志和事件源創(chuàng)建方法 
創(chuàng)建一個新的事件日志或事件源時,其實是在對注冊表添加一個條目。由于寫注冊表要求特殊的權(quán)限,所以在Web項目中創(chuàng)建事件日志和事件源就存在權(quán)限和安全的問題,Application項目中不存在此問題,本文重點講述Web項目中Windows日志使用方法,Application項目中的使用方法類似于Web項目,拋棄掉Web項目中的權(quán)限和安全處理即可,本文不再贅述。
在Web項目中,當(dāng)使用asp.net向系統(tǒng)中創(chuàng)建一個事件日志或者一個事件源時,可能會得到如下異常錯誤消息: System.Security.SecurityException: 不允許所請求的注冊表訪問權(quán)。這是因為運行asp.net進程的默認(rèn)帳戶是ASPNET(在IIS6.0下面是NetworkService),而此賬戶默認(rèn)只有讀權(quán)限,沒有寫權(quán)限,所以不能創(chuàng)建事件日志或事件源。解決此問題的辦法有提升ASPNET帳戶的權(quán)限、不在程序內(nèi)部創(chuàng)建事件日志或事件源等,主要有以下三種解決方案:
A、  在程序運行之前,定義要使用的事件日志和事件源,打開注冊表編輯器,手工將事件日志和事件源添加到注冊表中。主要步驟如下:
①     點擊“開始”菜單,再點擊“運行”。
②     在“運行”的“打開”框中輸入“regedit”,然后按OK按鈕,打開注冊表編輯器。
③     在注冊表編輯器中找到下列子鍵:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog
④     右鍵單擊“Eventlog”,點擊“新建”,再點“項”,將在“Eventlog”的下一級創(chuàng)建一個新的項目,將此項目命名為“TDDN”, TDDN項就是事件日志,可以根據(jù)實際情況為此項命名,比如可以命名為項目名稱。
⑤     在“TDDN”項上單擊右鍵,點擊“新建”,再點“項”,將在“TDDN”的下一級創(chuàng)建一個新的項,將此項命名為“Weblog”, Weblog項就是事件源,此項也可以根據(jù)實際情況命名。
⑥     關(guān)閉注冊表編輯器。
這樣事件日志和事件源就建好了,如果需要多個事件日志或事件源,重復(fù)以上過程。這種方法要求對注冊表比較熟悉,操作起來可能有一點復(fù)雜,可以寫一個類來實現(xiàn)配置注冊表,只要運行該類便可添加相應(yīng)的項目,免除了手工添加的繁瑣,這是第二種解決方案,方法如下:
B、  在System.Diagnostics命名空間中有一個EventLogInstaller類,它能夠創(chuàng)建和配置應(yīng)用程序在運行時要讀寫的事件日志和事件源。通過下列步驟,便能夠使用EventLogInstaller類來創(chuàng)建一個事件日志和事件源:
①     用C#來創(chuàng)建一個名為EventLogSourceInstaller的“類庫”。
②     在此項目中添加對System.Configuration.Install.dll的引用。
③     將自動產(chǎn)生的Class1.cs更名為MyEventLogInstaller.cs。
④     在MyEventLogInstaller.cs中的寫入以下代碼:
using System;
using System.Diagnostics;
using System.ComponentModel;
using System.Configuration.Install;
namespace EventLogSourceInstaller {
[RunInstaller(true)]
public class MyEventLogInstaller: Installer{
public  EventLogInstaller myEventLogInstaller;
public MyEventLogInstaller(){
//Create Instance of EventLogInstaller
myEventLogInstaller = new EventLogInstaller();
// Set the Source of Event Log, to be created.
myEventLogInstaller.Source = "WebLog";
// Set the Log that source is created in
myEventLogInstaller.Log = "TDDN";
Installers.Add(myEventLogInstaller);
}
}
}
⑤     生成此項目,得到EventLogSourceInstaller.dll。
⑥     打開Visual Studio .NET 命令提示,轉(zhuǎn)到EventLogSourceInstaller.dll所在目錄。
⑦     運行此命令來創(chuàng)建事件日志和事件源,運行方法為:輸入命令I(lǐng)nstallUtil EventLogSourceInstaller.dll。
這樣程序就在系統(tǒng)中創(chuàng)建一個事件日志:TDDN,在事件日志TDDN下創(chuàng)建了一個事件源:WebLog。
以上的這兩種解決方案都是在應(yīng)用系統(tǒng)運行之前,為系統(tǒng)手工添加事件日志和事件源,這樣做沒有安全權(quán)限問題,不存在安全隱患。更方便的方法還可以在應(yīng)用系統(tǒng)運行時,讓程序自動創(chuàng)建事件日志和事件源,這種方法必須提升ASPNET帳戶的系統(tǒng)操作權(quán)限,或者給asp.net進程一個有更大權(quán)限的模擬帳號。模擬帳號的實現(xiàn)比較復(fù)雜,而且功能和安全性上和提升ASPNET帳戶沒有區(qū)別,這里采用的方法是提升ASPNET帳戶的權(quán)限。以下是第三種解決方案:
C、  提升ASPNET帳戶的權(quán)限可以直接在Windows系統(tǒng)管理中給ASPNET帳戶添加對系統(tǒng)的讀寫權(quán)限,但是這樣做存在很嚴(yán)重的安全問題,asp.net進程有直接讀寫操作系統(tǒng)的權(quán)限,將給系統(tǒng)帶來很大的安全隱患。這里采用的提升ASPNET帳戶權(quán)限的方法是只將系統(tǒng)日志的操作權(quán)限賦給ASPNET帳戶,這樣雖然還存在一定的安全隱患,但是隱患已經(jīng)大大降低,并且可以在程序內(nèi)部自由創(chuàng)建事件日志和事件源,極大的提高了靈活性。ASPNET帳戶權(quán)限提升方法如下:
①     點擊“開始”,“運行”,輸入“regedit”,打開注冊表編輯器。
②     在注冊表編輯器中找到下列子鍵:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog
③     在Eventlog項目上單擊右鍵,在彈出的菜單中選擇“訪問許可”選項,然后找到本機的ASPNET帳戶加進來,并賦予讀寫權(quán)限。
這樣,ASPNET帳戶就有了讀寫系統(tǒng)日志的權(quán)限,就可以在程序中根據(jù)情況自由創(chuàng)建事件日志和事件源了。在程序中創(chuàng)建事件日志和事件源的方法如下:
調(diào)用 EventLog類的CreateEventSource 方法并指定數(shù)據(jù)源字符串和要創(chuàng)建的事件日志名稱,如果將事件日志名稱指定為空 (""),事件日志名稱將默認(rèn)為Application,這樣不會創(chuàng)建新事件日志,但會為應(yīng)用程序(Application)事件日志創(chuàng)建指定的數(shù)據(jù)源。如果創(chuàng)建一個新的事件日志,則在確定事件日志名稱是否唯一時將只計算指定字符串的前8 個字母。如下代碼所示:
System.Diagnostics.EventLog.CreateEventSource("WebLog", "TDDN");
將創(chuàng)建一個事件日志為TDDN,在該事件日志下創(chuàng)建一個事件源WebLog。要在遠(yuǎn)程計算機上創(chuàng)建自定義事件日志,要將此計算機名指定為第三個參數(shù)。以下代碼提供了一個示例:
System.Diagnostics.EventLog.CreateEventSource(" WebLog ", " TDDN ", "myserver");
將在遠(yuǎn)程計算機myserver上創(chuàng)建該事件日志和事件源。
2.3、寫入Windows日志的方法 
事件日志與事件源創(chuàng)建的問題解決了,接下來就可以在程序中將日志信息寫入到Windows系統(tǒng)日志中了。寫入方法是,首先創(chuàng)建EventLog類的一個實例,將其Source屬性與事件源名稱相關(guān)聯(lián),最后調(diào)用WriteEntry方法來往事件日志中添加日志信息。下面是一段寫入系統(tǒng)日志的簡單示例代碼:
EventLog eventLog = null;
if (!(EventLog.SourceExists("WebLog"))){            
EventLog.CreateEventSource("WebLog", "TDDN");
}
if (eventLog == null){
eventLog = new EventLog("TDDN");
eventLog.Source = "WebLog";

eventLog.WriteEntry("This is error!", EventLogEntryType.Error);
}
上面程序段中首先判斷數(shù)據(jù)源“WebLog”是否存在,如果不存在調(diào)用CreateEventSource方法創(chuàng)建該事件源,然后將事件源與EventLog 類的Source屬性關(guān)聯(lián),進行寫操作。傳遞給WriteEntry方法的第一個參數(shù)代表要記錄的日志消息,可以寫入任何消息。第二個參數(shù)代表事件日志的類型。
A、 事件日志類型分類
事件日志的類型用于指示事件日志的嚴(yán)重度。每個事件必須具有單一的類型,應(yīng)用程序在報告事件時將指示該類型。事件查看器使用該類型來確定在日志的列表視圖中顯示哪一個圖標(biāo)。它分為如下五類:
①     Error:錯誤事件,它指示用戶應(yīng)該知道的嚴(yán)重問題(通常是功能或數(shù)據(jù)的丟失)。
②     FailureAudit:失敗審核事件,它指示當(dāng)審核訪問嘗試失敗(例如打開文件的嘗試失?。r發(fā)生的安全事件。
③     Information:信息事件,它指示重要、成功的操作。
④     SuccessAudit:成功審核事件,它指示當(dāng)審核訪問嘗試成功(例如成功登錄)時發(fā)生的安全事件。
⑤     Warning:警告事件,它指示并不立即具有重要性的問題,但此問題可能表示將來會導(dǎo)致問題的條件。
在實際應(yīng)用中,選擇合適的事件日志類型,可以使日志記錄更清晰明了,幫助開發(fā)維護人員對應(yīng)用系統(tǒng)更好的監(jiān)控和維護。
B、 針對事件日志的五種類型分類,可以在應(yīng)用程序中寫一個通用的類,為每一個類型寫一個方法來寫入事件日志。
下面是自定義的通用類的代碼片斷:
public void Error(string sourceName, string message){
EventLog eventLog = null;
if (!(EventLog.SourceExists(sourceName))){
EventLog.CreateEventSource(sourceName, "TDDN");
}
if (eventLog == null){
eventLog = new EventLog("TDDN");
eventLog.Source = sourceName;
}
eventLog.WriteEntry(message, EventLogEntryType.Error);
}
public void Warning(string sourceName, string message){
EventLog eventLog = null;
if (!(EventLog.SourceExists(sourceName))){
EventLog.CreateEventSource(sourceName, "TDDN");
}
if (eventLog == null){
eventLog = new EventLog("TDDN");
eventLog.Source = sourceName;
}
eventLog.WriteEntry(message,System.Diagnostics.EventLogEntryType.Warning);
}
類似的可以寫出其它三種類型的事件日志寫入方法。該類方法將事件源(sourceName)和日志消息(message)作為參數(shù)傳遞,這樣可以提高事件日志寫入的靈活性。
C、 調(diào)用通用類事件日志寫入的方法
通用類方法的調(diào)用非常簡單,如下代碼片斷是調(diào)用通用類中Error方法的一個范例:
string strSourceName="WebLog";
CoustomEventLog log=new CoustomEventLog();
log.Error(strSourceName,"This is Error!");
strSourceName是事件源,log是CoustomEventLog類(即通用類)的一個實例,然后調(diào)用Error方法將日志消息“This is Error!”寫入到事件日志中。
也可以將程序中拋出的異常信息寫入事件日志:
string strSourceName="WebLog";
CoustomEventLog log=new CoustomEventLog();
try{
//執(zhí)行事件

相關(guān)文章

  • C# char類型字符轉(zhuǎn)換大小寫的實現(xiàn)代碼

    C# char類型字符轉(zhuǎn)換大小寫的實現(xiàn)代碼

    以下是對C#中char類型字符轉(zhuǎn)換大小寫的示例代碼進行了介紹,需要的朋友可以過來參考下哦
    2013-07-07
  • C#移除字符串中的不可見Unicode字符 案例代碼

    C#移除字符串中的不可見Unicode字符 案例代碼

    最近發(fā)現(xiàn)某個數(shù)據(jù)采集的系統(tǒng)拿下來的數(shù)據(jù),有些字段的JSON被莫名截斷了,導(dǎo)致后續(xù)數(shù)據(jù)分析的時候解析JSON失敗,這篇文章主要介紹了C#移除字符串中的不可見Unicode字符 ,需要的朋友可以參考下
    2023-02-02
  • C#學(xué)習(xí)筆記之飛行棋項目

    C#學(xué)習(xí)筆記之飛行棋項目

    這篇文章主要為大家詳細(xì)介紹了C#控制臺實現(xiàn)飛行棋項目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C# Entity Framework中的IQueryable和IQueryProvider詳解

    C# Entity Framework中的IQueryable和IQueryProvider詳解

    這篇文章主要介紹了C# Entity Framework中的IQueryable和IQueryProvider詳解,本文使用實例分析這兩個接口的內(nèi)部實現(xiàn),需要的朋友可以參考下
    2015-01-01
  • C#并行編程之Task同步機制

    C#并行編程之Task同步機制

    這篇文章介紹了C#并行編程之Task同步機制,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • C#實現(xiàn)字符串首字母大寫的方法示例

    C#實現(xiàn)字符串首字母大寫的方法示例

    這篇文章主要給大家介紹了關(guān)于利用C#實現(xiàn)字符串首字母大寫的相關(guān)資料,這是在最近工作中遇到的一個需求,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • .NET操作NPOI實現(xiàn)Excel的導(dǎo)入導(dǎo)出

    .NET操作NPOI實現(xiàn)Excel的導(dǎo)入導(dǎo)出

    NPOI是指構(gòu)建在POI 3.x版本之上的一個程序,NPOI可以在沒有安裝Office的情況下對Word或Excel文檔進行讀寫操作,下面小編為大家介紹了如何操作NPOI實現(xiàn)Excel的導(dǎo)入導(dǎo)出,需要的可以參考一下
    2023-09-09
  • C#多線程學(xué)習(xí)之(三)生產(chǎn)者和消費者用法分析

    C#多線程學(xué)習(xí)之(三)生產(chǎn)者和消費者用法分析

    這篇文章主要介紹了C#多線程學(xué)習(xí)之生產(chǎn)者和消費者用法,實例分析了C#中線程沖突的原理與資源分配的技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • C#?winform中ComboBox數(shù)據(jù)綁定的兩種方法及效率詳解

    C#?winform中ComboBox數(shù)據(jù)綁定的兩種方法及效率詳解

    這篇文章主要給大家介紹了關(guān)于C#?winform中ComboBox數(shù)據(jù)綁定的兩種方法及效率,Winform?ComboBox數(shù)據(jù)綁定是指將數(shù)據(jù)源中的數(shù)據(jù)與ComboBox控件進行關(guān)聯(lián),需要的朋友可以參考下
    2023-08-08
  • C#幾種排序算法

    C#幾種排序算法

    C#幾種排序算法...
    2007-03-03

最新評論