明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

用ASP.NET將頁面出錯信息寫入系統(tǒng)日志

[摘要]作者: 喻凱 設(shè)計網(wǎng)站的時候,不可能我們的網(wǎng)站不出現(xiàn)一點錯誤,常見的“頁面不存在”“頁面運行出錯”等錯誤信息一般網(wǎng)站多少總是存在的,關(guān)鍵是,這些錯誤出現(xiàn)以后,管理員怎樣方便及時的發(fā)現(xiàn)它們、盡量減...
作者: 喻凱

  設(shè)計網(wǎng)站的時候,不可能我們的網(wǎng)站不出現(xiàn)一點錯誤,常見的“頁面不存在”“頁面運行出錯”等錯誤信息一般網(wǎng)站多少總是存在的,關(guān)鍵是,這些錯誤出現(xiàn)以后,管理員怎樣方便及時的發(fā)現(xiàn)它們、盡量減少用戶對網(wǎng)站的不好印象。不管是IIS 4還是IIS 5,我們都可以設(shè)置網(wǎng)站的“自定義錯誤信息”,通過這樣的設(shè)置,一些系統(tǒng)默認的比較不友好的錯誤信息就可以更換為網(wǎng)站管理員自定義的頁面,這對于網(wǎng)站的實用和友好性都大有幫助。但是,我們在使用過程中卻發(fā)現(xiàn)一個比較不方便的問題,當我們查看網(wǎng)站日志的時候,我們發(fā)現(xiàn)了這些錯誤頁面的出現(xiàn),但是,卻不能在系統(tǒng)事件查看這些錯誤信息。而在網(wǎng)站的日志部分查看這些錯誤信息又比較麻煩,有沒有辦法可以直接將產(chǎn)生的錯誤信息象安全日志一樣保存在系統(tǒng)日志部分呢?ASP.NET現(xiàn)在就可以做到,F(xiàn)在,我們一步步學習怎樣實現(xiàn)這個功能。
一、建立EventLog虛擬目錄
實現(xiàn),我們在我們的網(wǎng)站建立一個名為“EventLog”的虛擬目錄,具體建立方法如下:在Win2000中,打開“開始”->“程序”->“管理工具”->“Internet信息服務(wù)”,找到建立的網(wǎng)站,郵件點擊選擇“新建”,在彈出的菜單選擇“虛擬目錄”,然后按照向?qū)гO(shè)置即可。
二、修改WEB.CONFIG文件
我們知道,在WEB.CONFIG文件中,我們可以象IIS的“自定義錯誤信息”頁面一樣設(shè)置錯誤信息頁面的位置和錯誤信息是否顯示等。為了實現(xiàn)本文提到的功能,我們需要適當修改WEB.CONFIG文件,打開“customErrors mode”為“ON”,目的是非地計算機用戶只能得到友好(自定義)的錯誤信息,具體設(shè)置如下:
<configuration>
<system.web>
<customErrors mode="On" defaultRedirect="/eventlog/customerrorpage.aspx">
<error statusCode="404" redirect="/eventlog/404Page.aspx"/>
<error statusCode="403" redirect="/eventlog/403page.aspx"/>
</customErrors>
</system.web>
</configuration>
在以上的設(shè)置中,我們看到,當404和403錯誤產(chǎn)生的時候,會將頁面轉(zhuǎn)到剛才我們設(shè)置EventLog虛擬目錄的相應(yīng)頁面。
三、建立其他文件
為了試驗我們的設(shè)置是否成功,首先,我們必須設(shè)立一個可以產(chǎn)生錯誤的頁面Default.aspx,這個頁面的代碼如下:
Default.aspx 頁面代碼
<% @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 = 1
y = 0

'產(chǎn)生錯誤
z = x/y
End Sub
</script>

<html>
<head>
</head>
<body>
<form method="post" action="eventlog.aspx" name="form1" id="number">
<asp:Button id="abutton" type="submit" text="點擊產(chǎn)生錯誤" runat="server" />
</form>
</body>
</html>
以上代碼我們設(shè)計了一個除零的錯誤頁面,顯然,按鈕提交時這個頁面肯定出錯,我們需要查看是否錯誤會加入系統(tǒng)日志。現(xiàn)在,我們來看錯誤頁面的代碼,這里,我們可能用到三個錯誤頁面customerrorpage.aspx、404Page.aspx、403Page.aspx,這些頁面都放在虛擬目錄EventLog下。它們的代碼分別如下:
Customerrorpage.aspx 代碼
<html>
<head></head>
<body>
<h1>custom error page</h1>
</body>
</html>
404page.aspx(頁面沒找到錯誤) 代碼
<html>
<head></head>
<body>
<h1>404 error page</h1>
</body>
</html>

403page.aspx(權(quán)限錯誤)代碼
<html>
<head></head>
<body>
<h1>403 error page</h1>
</body>
</html>
設(shè)置以上頁面以后,最重要的,我們需要設(shè)置全局配置文件global.asax,這樣錯誤信息才可以保存到系統(tǒng)日志,我們來看這個文件怎樣設(shè)置。
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Diagnostics" %>
<script language="VB" runat=server>

Public Sub Application_OnError(Sender as Object, E as EventArgs)
'捕捉錯誤
dim LastError as Exception = Server.GetLastError()
Dim ErrMessage as String = LastError.toString()

'這里設(shè)置日志的名字為“MyLog”
Dim LogName As String = "MyLog"
Dim Message As String = "Url " & Request.Path & " Error: " & ErrMessage

' 如果日志不存在,建立一個
If (Not EventLog.SourceExists(LogName)) Then
EventLog.CreateEventSource(LogName, LogName)
End if

Dim Log as New EventLog
Log.Source = LogName

'以下列出了五中錯誤
Log.WriteEntry(Message, EventLogEntryType.Information, 1)
' Log.WriteEntry(Message, EventLogEntryType.Error, 2)
' Log.WriteEntry(Message, EventLogEntryType.Warning, 3)
' Log.WriteEntry(Message, EventLogEntryType.SuccessAudit, 4)
' Log.WriteEntry(Message, EventLogEntryType.FailureAudit, 5)
End Sub
</script>
在以上設(shè)置中,定義了當錯誤發(fā)生的時候,WEB服務(wù)器將首先檢查是否存在名為“MyLog”的日志,如果不存在,建立一個。然后,將錯誤信息寫入日志并保存。在以上的設(shè)置中,我們注意以下幾點:(1)以上代碼中,我們將日志命名為“MyLog”,在實際應(yīng)用中,我們可以根據(jù)自己的要求設(shè)置日志名字,比如“××的網(wǎng)站日志”等,這樣不但容易辨別,而且也不會被其他管理員認錯為別的內(nèi)容;(2)以上我們給出的錯誤頁面很簡單,就是一個簡單語句。在實際網(wǎng)站應(yīng)用中,我們可以有幾個選擇,首先,我們可以將所有這些錯誤頁面設(shè)置為網(wǎng)站的首頁,當頁面出錯或者頁面不存在的時候,直接將用戶引導到網(wǎng)站首頁,這樣不顯示錯誤信息,對用戶而言可能瀏覽感覺較好;另外,也可以設(shè)置將錯誤頁面設(shè)置比較友好,最好是一般用戶都可以理解方式而不是簡單的英文提示。
四、查看效果
現(xiàn)在,我們打開“事件查看”來驗證是否將事件寫入日志。打開“程序”->“管理”->“事件查看器”,選擇“MyLog”,我們可以看到以下的界面(圖一):

在上圖中,我們看到了MyLog里面有幾個事件,打開查看,我們可以看到錯誤信息確實意見記錄下來(圖二):

五、總結(jié)
以上,我們用完整的舉例詳細介紹了錯誤信息寫入系統(tǒng)日志的實現(xiàn)方法。這樣實現(xiàn)以后,相信對系統(tǒng)管理和網(wǎng)站管理都可以起到很好的幫助作用。同時,在實用ASP.NET的過程中,我們不得不一次次驚嘆它功能的完善,ASP.NET不但的頁面設(shè)計、數(shù)據(jù)庫訪問、緩存等方面功能和性能大大提高,而且,在與系統(tǒng)的結(jié)合、整個環(huán)境的管理等方面也進一步完善。所以,對于習慣ASP或者PHP等其他語言編程的用戶,在使用ASP.NET以后,不能只僅僅關(guān)注頁面實現(xiàn)和數(shù)據(jù)處理等常規(guī)操作,而應(yīng)該進一步在網(wǎng)站安全、系統(tǒng)管理等方面學習ASP.NET,真正在網(wǎng)絡(luò)開發(fā)方面達到一個更高的境界。