应用程序无法连接到数据库时记录异常

时间:2017-03-10 22:11:44

标签: c# exception model-view-controller

我正在开发一个MVC应用程序。我有一个控制器,里面有方法。控制器方法调用存储库方法。存储库方法连接到数据库以获取信息。

当方法中存在异常时,我将该信息记录在数据库日志表中,但我确实遇到过这样一种情况,其中应用程序无法连接到数据库本身,在这种情况下有哪些选项可以记录该异常以及如何处理该异常。

当我使用fiddler并跟踪请求时,我可以发现Controller方法正在抛出异常,我可以跟踪查看响应的根​​本原因,但在生产环境中如何处理这种情况。怎么&如果应用程序无法连接到数据库,我在哪里记录。

3 个答案:

答案 0 :(得分:1)

您真的应该写入事件日志,最好使用自定义事件源,这样您的服务器团队就可以轻松地在事件查看器中排序和查找问题。

编写日志类来执行此操作非常简单: https://support.microsoft.com/en-us/help/307024/how-to-write-to-an-event-log-by-using-visual-c

唯一的"陷阱"没有人提到的是,当您使用自定义均匀源时,您的应用程序池的标识必须具有在计算机上创建源的权限,否则将失败并置于一般错误之下。有些人喜欢通过自己创建机器来准备机器,有些人喜欢通过PowerShell脚本作为部署步骤来完成。无论什么漂浮你的船。

https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.management/new-eventlog

您应该在数据库中进行的唯一日志记录是应用程序的审计跟踪日志记录。

答案 1 :(得分:1)

有几种方法可以做到。我会列出一些我能想到的清单。对于localhost,一些选项更为重要(在从您的机器开发期间)。我倾向于在此阶段包含网络问题。有几次,开发者的机器出现网络问题,而且无法使用其他选项。一旦它投入生产(Intranet应用程序仍应包括Internet连接问题),客户端显然正在使用Internet访问它。

  1. 高级选项:使用Azure Application Insight等高级服务。这非常强大,因为您可以设置自定义事件并基于每个userId生成报告/过滤器。我不确定亚马逊或谷歌云上是否有类似的选项。可能其他人可以在这里阐明一些。这是我的首选方式。它也可以按方法记录问题并生成警报。非常便利。 What is Application Insights?
  2. 在线数据记录服务:这些也很有用,但我无法想到它们对选项1的好处。这里有很多选择。这个词只是谷歌。几年前我在机器人项目(2005年)中使用了其中一些。

  3. DataStorage方式:如果需要,可以使用Azure Blob存储或任何其他NoSQL存储等简单存储。我确定亚马逊或其他云服务提供它。只需推送数据而不必担心创建表架构等。一旦建立了连接,一个优秀的服务提供商(Azure,亚马逊或谷歌)就不太可能让他们的存储空间可供您登录。我认为在亚马逊上是Amazon Simple Storage Service
    它曾经是Google上的Blobstore,但现在他们声称Cloud Storage有高级选项。我虽然没有使用它,所以不太了解它。任何人!??

  4. 让您直接了解:如果您不想将数据存储在任何地方,可以选择发送包含错误的电子邮件。此外,这只是我能想到的免费选项,可以远程通知您,而无需登录服务器。如果你想玩聪明,你可以直接发送这些电子邮件来记录敏捷板中的错误/任务。 这是我的首选方式。我与选项1一起执行此操作,以记录TeamServices中的错误。然后,TeamServices可以通过它自己的通知服务让指定的潜在客户。这样你就可以报告一个错误,所以为什么不让你的应用程序为你做这个当时可用的所有信息。
    您可以使用与Jira / TS / Bootcamp等直接集成的https://zapier.com/等服务。还有许多免费工具。

  5. 本地文件:在服务器上创建带日期戳的文件。当没有Internet连接时,这很有用。在localhost环境或Intranet网站的情况下,非常有用(可用的少数选项之一)。如果计算机可以访问Internet并且您想使用此选项,则还可以使用Google Drive / Dropbox / OneDrive或您选择的任何其他选项自动同步此文件。只需避免每分钟登录服务器以检查是否有文件!

  6. 服务器/系统日志记录:正如@ Riddle03所述,登录应用程序事件日志非常有用。这在localhost / Intranet环境中也很有用。

  7. 为什么要选择:让你的应用程序发推文,让全世界都知道你的系统刚刚遇到问题,而你正忙着修复它!

  8. 在哪里放置代码来记录它?完全取决于您的应用程序的配置方式。我是通过我的数据总线中的LoggerService来完成的,它负责建立任何Db连接。

答案 2 :(得分:0)

如果您可以访问服务器中的应用程序事件日志,则可以在其下进行登录。