設計網站的時候不可能我們的網站不出現一點錯誤常見的頁面不存在頁面運行出錯等錯誤信息一般網站多少總是存在的關鍵是這些錯誤出現以後管理員怎樣方便及時的發現它們盡量減少用戶對網站的不好印象不管是IIS 還是IIS 我們都可以設置網站的自定義錯誤信息通過這樣的設置一些系統默認的比較不友好的錯誤信息就可以更換為網站管理員自定義的頁面這對於網站的實用和友好性都大有幫助但是我們在使用過程中卻發現一個比較不方便的問題當我們查看網站日志的時候我們發現了這些錯誤頁面的出現但是卻不能在系統事件查看這些錯誤信息而在網站的日志部分查看這些錯誤信息又比較麻煩有沒有辦法可以直接將產生的錯誤信息象安全日志一樣保存在系統日志部分呢?ASPNET現在就可以做到現在我們一步步學習怎樣實現這個功能
一建立EventLog虛擬目錄
實現我們在我們的網站建立一個名為EventLog的虛擬目錄具體建立方法如下在Win中打開開始->程序->管理工具->Internet信息服務找到建立的網站郵件點擊選擇新建在彈出的菜單選擇虛擬目錄然後按照向導設置即可
二修改WEBCONFIG文件
我們知道在WEBCONFIG文件中我們可以象IIS的自定義錯誤信息頁面一樣設置錯誤信息頁面的位置和錯誤信息是否顯示等為了實現本文提到的功能我們需要適當修改WEBCONFIG文件打開customErrors mode為ON目的是非地計算機用戶只能得到友好(自定義)的錯誤信息具體設置如下
<configuration>
<systemweb>
<customErrors mode=On defaultRedirect=/eventlog/customerrorpageaspx>
<error statusCode= redirect=/eventlog/Pageaspx/>
<error statusCode= redirect=/eventlog/pageaspx/>
</customErrors>
</systemweb>
</configuration>
在以上的設置中我們看到當和錯誤產生的時候會將頁面轉到剛才我們設置EventLog虛擬目錄的相應頁面
三建立其他文件
為了試驗我們的設置是否成功首先我們必須設立一個可以產生錯誤的頁面Defaultaspx這個頁面的代碼如下
Defaultaspx 頁面代碼
<% @Language=VB %>
<script language=VB runat=server>
Sub Page_Load(Sender As Object E As EventArgs)
If IsPostBack Then
定義變量
dim x as integer
dim y as integer
dim z as integer
x =
y =
產生錯誤
z = x/y
End Sub
</script>
<html>
<head>
</head>
<body>
<form method=post action=eventlogaspx name=form id=number>
<asp:Button id=abutton type=submit text=點擊產生錯誤 runat=server />
</form>
</body>
</html>
以上代碼我們設計了一個除零的錯誤頁面顯然按鈕提交時這個頁面肯定出錯我們需要查看是否錯誤會加入系統日志現在我們來看錯誤頁面的代碼這裡我們可能用到三個錯誤頁面customerrorpageaspxPageaspxPageaspx這些頁面都放在虛擬目錄 EventLog下
它們的代碼分別如下
Customerrorpageaspx 代碼
<html>
<head></head>
<body>
<h>custom error page</h>
</body>
</html>
pageaspx(頁面沒找到錯誤) 代碼
<html>
<head></head>
<body>
<h> error page</h>
</body>
</html>
pageaspx(權限錯誤)代碼
<html>
<head></head>
body>
<h> error page</h>
</body>
</html>
設置以上頁面以後最重要的我們需要設置全局配置文件globalasax這樣錯誤信息才可以保存到系統日志我們來看這個文件怎樣設置
<%@ Import Namespace=System %>
<%@ Import Namespace=SystemDiagnostics %>
<script language=VB runat=server>
Public Sub Application_OnError(Sender as Object E as EventArgs)
捕捉錯誤
dim LastError as Exception = ServerGetLastError()
Dim ErrMessage as String = LastErrortoString()
這裡設置日志的名字為MyLog
Dim LogName As String = MyLog
Dim Message As String = Url & RequestPath & Error: & ErrMessage
如果日志不存在建立一個
If (Not EventLogSourceExists(LogName)) Then
EventLogCreateEventSource(LogName LogName)
End if
Dim Log as New EventLog
LogSource = LogName
以下列出了五中錯誤
LogWriteEntry(Message EventLogEntryTypeInformation )
LogWriteEntry(Message EventLogEntryTypeError )
LogWriteEntry(Message EventLogEntryTypeWarning )
LogWriteEntry(Message EventLogEntryTypeSuccessAudit )
LogWriteEntry(Message EventLogEntryTypeFailureAudit )
End Sub
</script>
在以上設置中定義了當錯誤發生的時候WEB服務器將首先檢查是否存在名為MyLog的日志如果不存在建立一個然後將錯誤信息寫入日志並保存在以上的設置中我們注意以下幾點()以上代碼中我們將日志命名為MyLog在實際應用中我們可以根據自己的要求設置日志名字比如 ××的網站日志等這樣不但容易辨別而且也不會被其他管理員認錯為別的內容()以上我們給出的錯誤頁面很簡單就是一個簡單語句在實際網站應用中我們可以有幾個選擇首先我們可以將所有這些錯誤頁面設置為網站的首頁當頁面出錯或者頁面不存在的時候直接將用戶引導到網站首頁這樣不顯示錯誤信息對用戶而言可能浏覽感覺較好另外也可以設置將錯誤頁面設置比較友好最好是一般用戶都可以理解方式而不是簡單的英文提示
四查看效果
現在我們打開事件查看來驗證是否將事件寫入日志打開程序->管理->事件查看器選擇MyLog我們可以看到以下的界面(圖一)
在上圖中我們看到了MyLog裡面有幾個事件打開查看我們可以看到錯誤信息確實意見記錄下來(圖二)
五總結
以上我們用完整的舉例詳細介紹了錯誤信息寫入系統日志的實現方法這樣實現以後相信對系統管理和網站管理都可以起到很好的幫助作用同時在實用ASPNET的過程中我們不得不一次次驚歎它功能的完善ASPNET不但的頁面設計數據庫訪問緩存等方面功能和性能大大提高而且在與系統的結合整個環境的管理等方面也進一步完善所以對於習慣ASP或者PHP等其他語言編程的用戶在使用ASPNET以後不能只僅僅關注頁面實現和數據處理等常規操作而應該進一步在網站安全系統管理等方面學習ASPNET真正在網絡開發方面達到一個更高的境界
From:http://tw.wingwit.com/Article/program/net/201311/13066.html