任何一個系統都不可能一勞永逸,一直沒有錯誤的運行下去,一個優秀的系統的出錯處理也一定是優秀的,而一個好的程式員也一定會很觀注可能出錯的地方,並作出相應的容錯處理。C#中的try catch其實已經為我們省了不少事情,本文並不是並不是對如何做出錯處理進行論述的,而是給出一種收集出錯資訊,並將出錯資訊儲存到Windows日誌中的方案。
一、處理代碼:
using System;
using System.Collections.Generic;
using System.Web;
using System.Diagnostics;
/// <summary>
/// 功能:錯誤記錄檔類,將錯誤資訊按指定事件記錄名記錄在系統日誌
/// </summary>
public static class Error
{
/// <summary>
/// 記錄日誌
/// </summary>
/// <param name="sourceName">日誌資源名,如:Town</param>
/// <param name="message">錯誤資訊</param>
public static void Log(string sourceName, string message)
{
EventLog eventLog = null;
// 確定日誌是否存在
if (!(EventLog.SourceExists(sourceName)))
{
EventLog.CreateEventSource(sourceName, sourceName + "Log");
}
if (eventLog == null)
{
eventLog = new EventLog(sourceName + "Log");
eventLog.Source = sourceName;
}
// 記錄日誌資訊
eventLog.WriteEntry(message, System.Diagnostics.EventLogEntryType.Error);
}
}
注意:因為系統日誌的操作是有許可權控制的,所以我們還要把對系統日誌操作的許可權賦給ASP.net使用者,方法如下:“開始->運行”,輸入命令“regedt32”,找到“System->CurrentControlSet->Services->Eventlog“,選擇“安全->許可權->添加”,然後找到原生“ASP.Net”使用者,加進來並且給讀取許可權就好了,加進來後目錄中會多一個“ASP.net_wp account“
二、調用方法
try
{
……
}
catch (Exception ex)
{
ErrorMessage.Log("Town", ex.ToString());
return false;
}
三、一點說明
系統出錯後,會自動將出錯資訊記錄到系統日誌中,你可以在“開始->程式->管理工具->事件檢視器”中發現一個新的項目“TownLog”,這便是記錄出錯資訊的,如所示。
相關轉載:如何將網頁錯誤資訊寫入事件記錄
將網頁產生的錯誤資訊儲存到系統的事件記錄中,那麼網站錯誤資訊的查看和維護時間的選擇就比較靈活。下面介紹如何?:
System.Diagnostics命名空間提供了寫入Windows事件記錄的類。使用時須先匯入。
EventLog類提供了檢測或建立日誌的靜態方法,被執行個體化後可以使用編程的方式寫入日誌項。一般情況下將程式碼放在Global.asax的Application_Error事件中,這樣能夠實現每當應用程式發生異常時便可將錯誤資訊寫入應用程式記錄檔。
實現代碼:
void Application_Error(object sender, EventArgs e)
{
//在出現未處理的錯誤時啟動並執行代碼
//定義寫入日誌的資訊
string Message = "\n\nURL:\n http://localhost/" + "\n\nSTACK TRACE:n " + Server.GetLastError().Message + "\n\nSTACK TRACE:n" + Server.GetLastError().StackTrace;
//如果事件記錄不存在,則在此建立
string LogName = "Application";
if (!System.Diagnostics.EventLog.SourceExists(LogName))
{
System.Diagnostics.EventLog.CreateEventSource(LogName, LogName);
}
//插入事件記錄
System.Diagnostics.EventLog Log = new System.Diagnostics.EventLog();
Log.Source = LogName;
Log.WriteEntry(Message, System.Diagnostics.EventLogEntryType.Error);
}
void Session_Start(object sender, EventArgs e)
{
//在新會話啟動時啟動並執行代碼
}
注意:因為系統日誌的操作是有許可權控制的,所以我們還要把對系統日誌操作的許可權賦給ASP.net使用者,方法如下:
1、開啟“控制台”→ “管理工具” →”電腦管理“→”系統工具“→”本機使用者和組“→”使用者“
2、雙擊ASP.NET使用者,在彈出的ASP.NET屬性視窗中,選擇“隸屬於”選項卡並添加“Administration”使用者,單擊確定按鈕。
“開始->運行”,輸入命令“regedt32”,找到“System->CurrentControlSet->Services->Eventlog“,選擇“安全->許可權->添加”,然後找到原生“ASP.Net”使用者,加進來並且給讀取許可權就好了,加進來後目錄中會多一個“ASP.net_wp account“
PS:
在Win2003系統中我是這樣解決ASP.NET 不能寫系統日誌的:
在註冊表:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Service\EventLog增加User的完全操縱許可權