【问题标题】:Simple handlng and logging of Exceptions i ASP.NET MVC?ASP.NET MVC 中异常的示例处理和日志记录?
【发布时间】:2012-02-10 17:45:25
【问题描述】:

嗨,

我正在寻找一种在我的 ASP.NET MVC 应用程序中将异常记录到数据库的简单方法。我查看了“异常管理应用程序块”,但找不到任何关于如何在 ASP.NET MVC 中处理此问题的简单明了的文章?

我应该尽可能地捕获异常,然后将其记录到数据库,但我不确定如何在 ASP.NET MVC 中执行此操作。在 WindowsForms 中有不同的事件(如意外异常)来监听我可以记录的位置,在 ASP.NET MVC 中是否有类似的东西?

致以最诚挚的问候

Edit1:我找到了一个名为 elmah http://code.google.com/p/elmah/ 的工具,但我不确定这是否是一个好的解决方案以及它是否适用于 ASP.NET MVC。

然后我也找到了这篇文章http://www.davidjuth.com/asp-net-mvc-error-handler.aspx,看起来简单明了,但我也不知道这是否正确?

【问题讨论】:

    标签: asp.net-mvc logging exception-handling


    【解决方案1】:

    使用ELMAH,可用on NuGet。它将在 Web 应用程序中记录未处理的异常并提供查看它们的界面。它可以记录到各种存储机制,包括 xml 和 sql 数据库,它还可以通过电子邮件向您发送错误。它基本上是在 ASP.Net 应用程序(WebForms 和 MVC)中记录异常的解决方案。

    如果您在 MVC 应用程序中使用 ELMAH,则应处理 some integration points。通过安装ELMAH.Mvc package from NuGet,这些可以是handled pretty well in one shot

    【讨论】:

    • 听起来不错!我会试试这个!我查看了 Alexander Beletsky 的文章,最重要的是他写道:更新:Elmah.MVC 现在作为 NuGet 包发布。无需阅读那么长的博客文章,只需安装它。他是指这篇文章还是另一篇博文?我需要按照他的说明进行操作还是只是为了安装软件包?
    • 另外,请不要我的网站将在虚拟主机上运行,​​因此我无法完全控制服务器。除了我的网站,我将无法在服务器上安装额外的软件。我还能使用 ELMAH 吗?
    • 可以,您不需要在服务器上安装任何东西。如果您不熟悉它,NuGet 只是在构建项目时引用依赖项的一种简单方法。您可以下载 ELMAH 并自己参考。无论哪种情况,您只需将 ELMAH.dll 与您的 Web 项目一起部署 - 无需在服务器上安装任何内容(如果您想登录 SQL Server,您当然需要访问它)。
    【解决方案2】:

    我建议您查看 NLog 以记录异常:http://nlog-project.org - 您可以将其配置为非常轻松地将异常转储到数据库中。

    至于 MVC 错误记录 - 这个问题 Error Handling in ASP.NET MVC 有一些非常好的解决方案。

    【讨论】:

    • 啊哈我以前听说过nlog,我去看看。 elmah 与 nlog 相比如何? elmah 似乎处理所有异常,记录它们并提供在线查看监视器?这听起来不错,但我不知道它是否适用于 ASP.NET MVC?我还发现这篇文章看起来清晰直接:davidjuth.com/asp-net-mvc-error-handler.aspx。有这些经验吗?
    • @SnowJim:查看我的回答和链接的文章。 davidjuth.com 上的文章已过时。 ELMAH 与 MVC 配合得很好。与 NLog 相比:ELMAH 将记录所有异常,只需要安装 ELMAH 包,但它不会记录任何其他内容。使用 NLog,您将负责所有记录调用,但当然您可以记录任何内容 - 它也不会提供 Web UI 来查看日志。 ELMAH 很可能是您想要的,它记录了您希望在 Web 应用程序中登录的 HttpContext 的大量详细信息。
    • 从未使用过 ELMAH - 但我已将 NLog 与 Castle Windsor IoC 容器和 ASP .NET MVC 一起使用,它运行得非常好且轻松。我会同时尝试它们,看看你更喜欢哪一个 - 有这么多日志框架,它们都很好 - 通常归结为个人喜好 - 只要确保你使用一个适合你做事的方式和然后消除摩擦,您可以继续编写所需的应用程序!
    • @user1039947:我想我的意思是在 ASP.Net 应用程序中,ELMAH 消除了所有摩擦。你安装包,你就完成了。没有要编写的日志记录代码。但它只针对未处理的异常。
    • @qes - 听起来不错!也许我应该看看 :) 有点担心你说“它不会记录任何其他内容”——这是否意味着你不能记录任意调试消息?我觉得这真的很有用。也许应该有一个维基页面或其他东西来讨论这个?不知道这是否合适
    猜你喜欢
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多