用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,真正在网络开发方面达到一个更高的境界。

相关文章推荐

asp.net web.config 自定义错误信息

.aspx 510兼职网提醒您:您访问的页面不存在 请转到首页进入 BODY { FONT-SIZE: 9pt; COLOR: #842b00; liNE-HEIGHT: 16pt; ...
  • iouxyz
  • iouxyz
  • 2011年08月09日 15:28
  • 680

在ASP.Net中写系统日志

在ASP.Net中写系统日志 ASP.Net默认情况下,是没有写系统日志的权限的。要在ASP.Net中写系统日志,首先我们要先有其权限。我们可以通过设置或修改注册表的权限来解决。 ...

编译器错误信息: CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET\Framework……”--“

说明: 在编译向该请求提供服务所需资源的过程中出现错误。请检查下列特定错误详细信息并适当地修改源代码。 编译器错误消息: CS0016: 未能写入输出文件“c:\Windows\Microsof...
  • im_sk
  • im_sk
  • 2012年06月06日 16:18
  • 4490

Win7下:编译器错误信息: CS0016: 未能写入输出文件“c:/Windows/Microsoft.NET/Framework……”

错误如下:“/”应用程序中的服务器错误。编译错误 说明: 在编译向该请求提供服务所需资源的过程中出现错误。请检查下列特定错误详细信息并适当地修改源代码。  编译器错误消息: CS0016: 未能写入输...
  • lincyang
  • lincyang
  • 2011年04月12日 11:01
  • 22307

显VB.NET示错误信息.txt

  • 2013年12月13日 09:58
  • 363B
  • 下载

使用Log4Net将系统日志信息记录到记事本和数据库中

一、使用Log4Net将日志记录到记事本中步骤         1,将log4net.dll文件添加到项目引用中         2,写日志记录器类如下: /// /// 日志记录器 ...

asp.net错误日志写入

当我们一个web项目开发已完成,测试也通过了后,就把他放到网上去,但是,bug是测不完的,特别是在一个大的网络环境下。那么,我们就应该记录这些错误,然后改正。这里,我的出错管理页面是在global.a...

利用Log4net记录系统日志信息(支持6种数据库)

Log4net的优点: 几乎所有的大型应用都会有自己的用于跟踪调试的API。因为一旦程序被部署以后,就不太可能再利用专门的调试工具了。然而一个管理员可能需要有一套强大的日志系统来诊断和修复配置上的问...
  • dmz1981
  • dmz1981
  • 2013年02月05日 11:57
  • 4138

RDIFramework.NET ━ 9.13 系统日志与系统异常管理 ━ Web部分

一个软件在投入运行时不可能没有任何异常,在软件发生异常时及时的记录下来,也好我们及时对异常进行跟踪,以解决发生的异常,避免异常的再次发生。异常分为两种情况,一种为客户端发生的异常,另一种为服务端发生的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用ASP.NET将网页错误信息写入系统日志
举报原因:
原因补充:

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