用ASP.NET将网页错误信息写入系统日志

转载 2007年09月17日 16:29:00

 贴自:http://www.pcdog.com/edu/aspdotnet/2006/10/d153199.html

 设计网站的时候,不可能我们的网站不出现一点错误,常见的“页面不存在”“页面运行出错”等错误信息一般网站多少总是存在的,关键是,这些错误出现以后,管理员怎样方便及时的发现它们、尽量减少用户对网站的不好印象。不管是IIS 4还是IIS 5,我们都可以设置网站的“自定义错误信息”,通过这样的设置,一些系统默认的比较不友好的错误信息就可以更换为网站管理员自定义的页面,这对于网站的实用和友好性都大有帮助。但是,我们在使用过程中却发现一个比较不方便的问题,当我们查看网站日志的时候,我们发现了这些错误页面的出现,但是,却不能在系统事件查看这些错误信息。而在网站的日志部分查看这些错误信息又比较麻烦,有没有办法可以直接将产生的错误信息象安全日志一样保存在系统日志部分呢?ASP.NET现在就可以做到。现在,我们一步步学习怎样实现这个功能。
  一、建立EventLog虚拟目录
  实现,我们在我们的网站建立一个名为“EventLog”的虚拟目录,具体建立方法如下:在Win2000中,打开“开始”->“程序”->“管理工具”->“Internet信息服务”,找到建立的网站,邮件点击选择“新建”,在弹出的菜单选择“虚拟目录”,然后按照向导设置即可。
  二、修改WEB.CONFIG文件
  我们知道,在WEB.CONFIG文件中,我们可以象IIS的“自定义错误信息”页面一样设置错误信息页面的位置和错误信息是否显示等。为了实现本文提到的功能,我们需要适当修改WEB.CONFIG文件,打开“customErrors mode”为“ON”,目的是非地计算机用户只能得到友好(自定义)的错误信息,具体设置如下:
  <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>
  在以上的设置中,我们看到,当404和403错误产生的时候,会将页面转到刚才我们设置EventLog虚拟目录的相应页面。
  三、建立其他文件
  为了试验我们的设置是否成功,首先,我们必须设立一个可以产生错误的页面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
  
  '产生错误
  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="点击产生错误" runat="server" />
  </form>
  </body>
  </html>
  以上代码我们设计了一个除零的错误页面,显然,按钮提交时这个页面肯定出错,我们需要查看是否错误会加入系统日志。现在,我们来看错误页面的代码,这里,我们可能用到三个错误页面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(权限错误)代码
  <html>
  <head></head>

 

    body>
  <h1>403 error page</h1>
  </body>
  </html>
  设置以上页面以后,最重要的,我们需要设置全局配置文件global.asax,这样错误信息才可以保存到系统日志,我们来看这个文件怎样设置。
  <%@ 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()
  
  '这里设置日志的名字为“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>
  在以上设置中,定义了当错误发生的时候,WEB服务器将首先检查是否存在名为“MyLog”的日志,如果不存在,建立一个。然后,将错误信息写入日志并保存。在以上的设置中,我们注意以下几点:(1)以上代码中,我们将日志命名为“MyLog”,在实际应用中,我们可以根据自己的要求设置日志名字,比如 “××的网站日志”等,这样不但容易辨别,而且也不会被其他管理员认错为别的内容;(2)以上我们给出的错误页面很简单,就是一个简单语句。在实际网站应用中,我们可以有几个选择,首先,我们可以将所有这些错误页面设置为网站的首页,当页面出错或者页面不存在的时候,直接将用户引导到网站首页,这样不显示错误信息,对用户而言可能浏览感觉较好;另外,也可以设置将错误页面设置比较友好,最好是一般用户都可以理解方式而不是简单的英文提示。
  四、查看效果
  现在,我们打开“事件查看”来验证是否将事件写入日志。打开“程序”->“管理”->“事件查看器”,选择“MyLog”,我们可以看到以下的界面(图一):
  
  在上图中,我们看到了MyLog里面有几个事件,打开查看,我们可以看到错误信息确实意见记录下来(图二):
  
  五、总结
  以上,我们用完整的举例详细介绍了错误信息写入系统日志的实现方法。这样实现以后,相信对系统管理和网站管理都可以起到很好的帮助作用。同时,在实用ASP.NET的过程中,我们不得不一次次惊叹它功能的完善,ASP.NET不但的页面设计、数据库访问、缓存等方面功能和性能大大提高,而且,在与系统的结合、整个环境的管理等方面也进一步完善。所以,对于习惯ASP或者PHP等其他语言编程的用户,在使用ASP.NET以后,不能只仅仅关注页面实现和数据处理等常规操作,而应该进一步在网站安全、系统管理等方面学习ASP.NET,真正在网络开发方面达到一个更高的境界。

net嵌入页面的几种方法

转自:http://blog.csdn.net/qin_zhangyongheng/article/details/38359919 一.应用框架技术  ---- 要在宿主页面中嵌...
  • threadroc
  • threadroc
  • 2016年08月28日 11:09
  • 863

asp.net 实现输入网址生成当前网页的图片

效果: 添加两个类: using System; using System.Collections.Generic; using System.Text; using System.Drawin...
  • zhifeiya
  • zhifeiya
  • 2016年05月16日 23:15
  • 1939

C#学习之web网站制作入门篇(ASP.NET)

之前熟悉C#与.net, 以为.net就是C#,现在知道了.NET是C#的开发平台,C#即可用来开发客户端(WindowsFrom),也可以用来开发网站即ASP.NET;...
  • chongshangyunxiao321
  • chongshangyunxiao321
  • 2016年04月09日 09:49
  • 13067

Android将程序崩溃信息保存本地文件

大家都知道,现在安装Android系统的手机版本和设备千差万别,在模拟器上运行良好的程序安装到某款手机上说不定就出现崩溃的现象,开发者个人不可能购买所有设备逐个调试,所以在程序发布出去之后,如果出现了...
  • djun100
  • djun100
  • 2014年02月28日 19:51
  • 1104

Asp.Net Core 2.0 生成操作数据库文件需要的文件

开发环境 VS2017 + Win7 x64 生成操作数据库文件需要配置或添加的文件 1、Startup.cs public IConfiguration Configuratio...
  • king_hh
  • king_hh
  • 2017年12月29日 16:50
  • 90

ASP.NET中文件流的使用——下载Excle文件、文件的读取和写入

ASP.NET中文件流的使用——下载文件
  • syaguang2006
  • syaguang2006
  • 2013年08月15日 18:39
  • 2098

asp.net下微信网页授权

微信网页授权我相信做微信开发的小伙伴都可能遇见过这样的问题1.我们要明白微信网页授权主要是用来做什么? 用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信 息, 进...
  • jiangcsc
  • jiangcsc
  • 2016年10月25日 14:33
  • 2158

C#和JavaScript交互(asp.net前台和后台互调)

C#代码与javaScript函数的相互调用: 1.如何在JavaScript访问C#函数? 2.如何在JavaScript访问C#变量? 3.如何在C#中访问JavaScript的...
  • u014180504
  • u014180504
  • 2017年04月26日 08:49
  • 1170

[ASP.net教程]VS2012发布网站详细步骤

 1、打开你的VS2012网站项目,右键点击项目》菜单中 重新生成一下网站项目;再次点击右键》发布: 2、弹出网站发布设置面板,点击,创建新的发布配置文件: 输入你自己定义的配置...
  • fengxu511
  • fengxu511
  • 2015年01月08日 10:03
  • 1970

asp.net--站点架构(页脚设计)和配色与样式统一设定

css代码如下:
  • yayun0516
  • yayun0516
  • 2014年11月23日 19:54
  • 804
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用ASP.NET将网页错误信息写入系统日志
举报原因:
原因补充:

(最多只允许输入30个字)