![](/img/trans.png)
[英]What is the best method for catching all exceptions in a ASP.NET application?
[英]What is the best way to log exceptions in Visual Basic, on an ASP.NET Application?
我正在使用Visual Basic编写的ASP.NET Web应用程序,我正在尝试追踪我收到的错误消息。
我想让它将异常记录到一个文件(或事件日志),所以我可以看到它,因为错误只发生在生产服务器上,而不是在开发环境中(因此VS没有安装在那里...)。
有没有人对如何做到这一点的最佳实践有任何想法?
干杯
不确定它是否是“最佳实践”,但最常见的方法是使用log4net 。
使用log4net或Enterprise Library Logging 。 我还添加了一个http模块,用于记录所有未处理的错误(过滤掉404错误)。
在执行全局错误处理程序时,您可能希望开发某种方式来了解您已经记录了错误。 如果您希望将错误记录在更靠近错误源的位置,从而允许您将更多上下文包含在出错的位置,则会发生这种情况。
在我记录任何错误的情况下,我在一个例外的数据集合中添加了一个项目。 然后,我的全局错误处理程序检查所有异常对象,验证我们没有记录任何异常对象。
如果您运行的是ASP.NET 2.0或更高版本,那么最好的办法就是什么都不做。 默认情况下,ASP.NET Health Monitoring会将异常记录到应用程序事件日志中。 只需使用eventvwr.exe并从“ASP.NET”中查找警告。 它记录的信息非常完整。
当我说“什么都不做”时,我的意思是如果你只是要记录它们,就不要捕捉异常。 如果您愿意,可以设置自定义错误页面,但要确保不会在顶层捕获异常。
凌乱:当它出现时,抓住它(假设你可以?)并尽可能多地将数据丢弃到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,下次你清理代码库一点。
:)
如果您可以获取该站点的global.asax - 那么在Global.asax的'Application_Error'部分中执行类似这样的操作
Dim ex As New Exception()ex = Server.GetLastError()。GetBaseException()Dim g As new generalfunctions ASendEmailFunction(ex.Message.ToString()&ex.Source.ToString()&ex.StackTrace.ToString())
这将获取应用程序的每个错误并向您发送所有详细信息 - 您需要创建只向您发送包含内容的电子邮件的ASendEmailFunction()
(你可以做得比这更好但是我直接在这个盒子里打字)
最常用的日志记录库是企业库日志记录块或log4Net:-Enterprise Library Logging Block文章: http : //www.codeproject.com/KB/architecture/GetLoggingWithEntLib.aspx -Log4Net: http://www.ondotnet .COM /酒吧/ A / DOTNET / 2003/06/16 / log4net.html
干杯
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.