【问题标题】:How to implement event logger for ASP.NET web application?如何为 ASP.NET Web 应用程序实现事件记录器?
【发布时间】:2013-03-02 06:22:58
【问题描述】:

我有一个用 C# 编写的 ASP.NET Web 应用程序。它使用 SQL Server 2008 数据库。似乎某些 SQL 查询使 SQL Server 死锁,而且我的 SQL Server 性能也很差。为了找出哪个,我想添加一个诊断事件日志记录,但我不确定如何。如果我正在编写一个普通的 Windows 应用程序,我会使用 Windows 事件日志,或者只使用一个简单的文本文件。所以我很好奇,如何在 Web 应用程序中做同样的事情?

【问题讨论】:

标签: c# asp.net sql-server-2008 web-applications event-log


【解决方案1】:

有许多用于从 ASP.Net Web 应用程序进行日志记录的选项。

NLog 是值得考虑的一个,因为它性能良好,并根据严重程度提供了广泛的日志目标,包括文本文件、数据库、电子邮件或 GUI 日志查看器,例如Sentinel

话虽如此,应用程序级日志记录可能不是专门诊断 SQL Server 死锁的最佳方法。我建议从 SQL Server Profiler 开始执行该任务

Analyzing Deadlocks with SQL Server Profiler

【讨论】:

  • 我同意@ErikJ NLog 和 Log4Net 是很好的解决方案。
【解决方案2】:

.NET从2.0版本开始就内置了功能丰富、配置灵活的登录系统。 你可以从this article on MSDN开始 出于某种原因,大多数人不使用它,而是更喜欢 Log4net 或 NLog 进行日志记录。首先是java日志工具的移植,其次是重新思考。 我个人更喜欢将 TraceSource 与过滤器一起使用。 ADO.NET 本身也支持它。

【讨论】:

  • 好交易。内置日志保存在哪里——文件系统文件或数据库?
  • @c00000fd 将其配置为保存在任何位置。这是关于听众的信息msdn.microsoft.com/en-us/library/4y5y10s7.aspx
  • 恕我直言,内置日志框架缺乏 NLog 或 Log4Net 等解决方案的完整性。
  • @EricJ。能举个例子吗?
  • 示例:如何使用内置框架将关键和错误项写入文本文件、数据库和电子邮件地址;警告项目到文本文件和数据库,其他项目只是到文本文件,但对于调试版本,还要将所有内容写入基于 GUI 的查看器以促进开发?使用 NLog 只需几行配置。
【解决方案3】:

死锁发生在 SQL 端,ASP.NET 不可能了解全部情况。

我建议检查您的查询是否有 WITH LOCK 语句,然后在删除它之前弄清楚它为什么会出现。

否则,如果您通过 SQL Server 诊断管理器发现有问题的查询......或者如果您可以纯粹在 SQL 端重现死锁,请将 WITH NOLOCK 添加到该查询。 T

这是迄今为止最简单的解决方案,更好的解决方案首先要找到导致死锁发生的根本原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    • 2016-06-12
    • 1970-01-01
    • 2011-09-25
    相关资源
    最近更新 更多