在ASP.NET应用程序中,在Visual Basic中记录异常的最佳方法是什么?

时间:2009-04-06 15:59:59

标签: asp.net vb.net logging

我正在使用Visual Basic编写的ASP.NET Web应用程序,我正在尝试追踪我收到的错误消息。

我想让它将异常记录到文件(或事件日志)中,所以我可以看到它,因为错误只发生在生产服务器上,而不是在开发环境中(因此VS不是'安装在那里......)。

有没有人对如何做到这一点的最佳实践有任何想法?

干杯

7 个答案:

答案 0 :(得分:4)

不确定这是否是“最佳做法”,但最常见的方法是使用log4net

答案 1 :(得分:2)

使用log4netEnterprise Library Logging。我还添加了一个http模块,用于记录所有未处理的错误(过滤掉404错误)。

在执行全局错误处理程序时,您可能会想要开发某种方式来了解您已经记录了错误。如果您想在错误源附近记录错误,则会发生这种情况,从而允许您将更多上下文包含在出错的位置。

在我记录任何错误的情况下,我在一个异常上添加了一个数据集合的项目。然后我的全局错误处理程序检查所有异常对象,验证我们没有记录任何异常对象。

答案 2 :(得分:1)

如果您运行的是ASP.NET 2.0或更高版本,最好的办法是什么也不做。默认情况下,ASP.NET Health Monitoring会将异常记录到应用程序事件日志中。只需使用eventvwr.exe并从“ASP.NET”中查找警告。它记录的信息非常完整。

当我说“什么都不做”时,我的意思是如果你只是要记录它们,就不要捕捉异常。如果您愿意,可以设置自定义错误页面,但要确保不会在顶层捕获异常。

答案 3 :(得分:1)

很惊讶没人提到Elmah

Elmah专为使用ASP.NET进行错误记录而构建,其中一个很棒的功能是,只需将DLL放入Bin目录即可将其添加到ASP.NET应用程序中,并对web.config文件进行一些编辑。不需要更改代码。

答案 4 :(得分:0)

凌乱:当它出现时,抓住它(假设你可以?)并尽可能多地将数据丢弃到PAGE。将其放在HTML注释中,以便用户无法看到它。类似的东西:

  

lblError.Text =(把格式化的   这里的例外信息);

     

< ! - < asp:label id = lblError /> - >

几乎一样凌乱:查看Trace.WriteLine有点东西。您可以在ASP.NET中启用跟踪,允许您转到特定页面(_trace.axd?)并获取该页面加载的所有消息的转储。我没有真正使用它,但确实有用。

稍微不那么混乱(因为这似乎是暂时的):使用Trace.WriteLine输出内容,并在服务器上运行debugview(来自microsoft),如果你有物理访问权限的话。然后你可以捕获这个调试输出(核心win32 api就是OutputDebugString - 我认为.net调用是Debug.WriteLine)

更好:Log4Net。设置它以便您可以在任何地方使用它。大部分时间都将它置于“错误”状态,但在这种情况下,请使用“DEBUG”直到找到解决方案。

我会选择3,然后是4或3,以及下次清理代码库时的4。

:)

答案 5 :(得分:0)

如果您可以获取该站点的global.asax - 那么在Global.asax的'Application_Error'部分中执行类似这样的操作

Dim ex As New Exception() ex = Server.GetLastError()。GetBaseException() 昏暗作为新的一般功能 ASendEmailFunction(ex.Message.ToString()& ex.Source.ToString()& ex.StackTrace.ToString())

这将获取应用程序的每个错误并向您发送所有详细信息 - 您需要创建只向您发送包含内容的电子邮件的ASendEmailFunction()

(你可以做得比这更好但我直接在这个方框中输入这个)

答案 6 :(得分:0)

最常用的日志记录库是企业库日志记录块或log4Net: -Enterprise Library Logging Block文章: http://www.codeproject.com/KB/architecture/GetLoggingWithEntLib.aspx -Log4Net: http://www.ondotnet.com/pub/a/dotnet/2003/06/16/log4net.html

干杯