5

我有一堆现有的客户端/服务器应用程序,它们目前正在运行。偶尔,客户会想要添加某种类型的 Web 界面来访问他们的部分数据。这些通常是定制的,尽管有些是“通用的”;但是每个人在自己的虚拟机中都有自己的“实例”。

我想要的是一个集中区域来捕获和记录任何这些虚拟机上出现的任何错误。

我正在考虑创建一个新数据库并设置一个 WCF 服务,以使这些 Web 应用程序中的每一个都能够在我的集中式数据库以及本地 EventLog 中创建一个日志条目。

这是一个糟糕的设计吗?

更新

webapps 在 2003/IIS6 和 2008/IIS7 上,内置在 ASP.NET 中。许多实例位于一对 Web 服务器上,但许多实例将部署到单个 VM。

4

3 回答 3

4

这正是我们实现它的方式。

我们在数据库中有 3 个表:

Event Types
------------ 
EventType int 
EventDescription varchar(50)


MonitoredSystems
---------------
SystemID int
SystemName varchar(50)
SystemDescription text


Events
-------
RecordID bigint
EventTime datetime
SystemID int FK
EventText text
EventType int FK
Acknowledged bit

我们还创建了一个可以查看事件的网站。“已确认”字段让我们设置视图名称“未确认的关键问题”,以便我们可以快速查看任何新问题,并在阅读时确认它们。

我们知道还有其他工具可以为我们做到这一点,但没有一个工具像我们自己的本土版本那样容易集成,我们现在在我们构建的每个应用程序中都使用它。我们还有一些其他的自定义设置,我在这里没有提到其他工具没有提供开箱即用的功能。

所以我觉得你的想法很好。如果您自己构建它,您可以自定义它以按照您想要的方式工作。但是,我建议至少研究一下 Log4net 等工具。

于 2010-01-04T18:59:27.573 回答
3

您应该结合 Orbit One 的异常报告器 ( http://aspexceptionreporter.codeplex.com/Release )来查看 ELMAH(错误记录模块和处理程序)(http://code.google.com/p/elmah/ ) /ProjectReleases.aspx?ReleaseId=35343 ) 结合起来可以为您提供企业范围内的集中位置的错误报告。

于 2010-01-04T18:58:34.547 回答
0

如果您经常记录(调试/信息/警告),请确保您的 RPC 调用是异步完成的。

我建议使用更灵活的数据结构;

Events
-------
RecordID bigint
EventTime datetime
EventLevel text 
SystemID text
EventText text
EventType text
Acknowledged bit

EventProperties
-------
RecordID bigint
key text
value text

EventProperties 允许日志记录应用程序记录任何可能有用的信息,而无需提前定义此类属性。请注意,SystemID 没有任何限制,它允许在不配置的情况下添加系统。

于 2011-10-06T06:41:16.177 回答