代码之家  ›  专栏  ›  技术社区  ›  Nick Haslam

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

  •  2
  • Nick Haslam  · 技术社区  · 16 年前

    我正在开发一个使用VisualBasic编写的ASP.NET Web应用程序,我正试图跟踪我收到的一条错误消息。

    我想让它将异常记录到一个文件(或事件日志)中,这样我就可以看到它,因为错误只发生在生产服务器上,而不是在开发环境中(因此,这里没有安装vs…)。

    对于如何做到这一点,有人对最佳实践有什么想法吗?

    干杯

    7 回复  |  直到 15 年前
        1
  •  4
  •   Otávio Décio    16 年前

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

        2
  •  2
  •   JoshBerke    16 年前

    使用 log4net Enterprise Library Logging . 我还添加了一个HTTP模块,它记录所有未处理的错误(过滤掉404个错误)。

    在执行全局错误处理程序时,您可能希望开发某种方法来了解您已经记录了一个错误。如果您希望将错误记录到离错误源更近的位置,从而允许您在出错的内容中包含更多上下文,则会发生这种情况。

    在我的例子中,当我记录任何错误时,我在异常的数据收集中添加了一个项目。然后,我的全局错误处理程序检查所有异常对象,以验证我们没有记录任何异常对象。

        3
  •  1
  •   John Saunders    16 年前

    如果您运行的是ASP.NET 2.0或更高版本,最好不要做任何事情。默认情况下,ASP.NET运行状况监视将异常记录到应用程序事件日志中。只需使用eventvwr.exe并从“asp.net”中查找警告。它记录的信息非常完整。

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

        4
  •  1
  •   codeulike    15 年前

    很惊讶没人提到 Elmah 然而

    埃尔马 它是专门为使用ASP.NET进行错误日志记录而构建的,其中最重要的一点是,只需将dll放到bin目录中,并对web.config文件进行一些编辑,就可以将其添加到ASP.NET应用程序中。不需要更改代码。

        5
  •  0
  •   YodasMyDad    16 年前

    如果您可以获得该站点的global.asax,那么在global.asax的“application_error”部分中执行类似的操作

    作为新异常()的dim ex ex=server.getLastError().getBaseException()) 作为新的通用函数的dim g asendemailFunction(例如message.toString()&ex.source.toString()&ex.stacktrace.toString())

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

    (你可以做得比这更好,但我直接在这个盒子里打)

        6
  •  0
  •   Geo    16 年前

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

    干杯

        7
  •  0
  •   Nic Wise    16 年前

    凌乱:当它出现时,抓住它(假设你可以?)把尽可能多的数据放到页面上。把它放在HTML注释中,这样用户就看不到它了。比如:

    lblerror.text=(将格式化后的 例外信息);

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

    几乎是乱七八糟的:查找trace.writeline之类的东西。您可以在ASP.NET中启用跟踪,它允许您转到特定的页面(_trace.axd?)并获取该页面加载的所有消息的转储。我还没真正用过,但它确实有用。

    稍微简单一点(因为这似乎是暂时的事情):使用trace.writeline输出内容,如果您有物理访问权,可以在服务器上运行debugview(来自Microsoft)。然后,您可以捕获此调试输出(此函数上的核心win32 API是outputDebugString-我认为.NET调用是debug.writeline)

    更好:log4net。设置它以便您可以在任何地方使用。大多数时候把它放在“错误”上,但在这种情况下,使用“调试”直到找到解决方案。

    我要3分,然后4分。或者现在是3,下次清理代码库时是4。

    :)