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

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

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

这是一个糟糕的设计吗?

更新

Web 应用程序位于 2003/IIS6 和 2008/IIS7 上,内置于 ASP.NET。许多实例位于一对 Web 服务器上,但许多实例将部署到单独的虚拟机上。

有帮助吗?

解决方案

这正是我们如何实现它。

我们在数据库中具有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的等

其他提示

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

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

我建议一个更灵活的数据结构;

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

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

在EventProperties允许记录应用程序来记录可能是有用的任何信息,而不必预先定义这样的性质。请注意,有上SYSTEMID,其允许添加的系统,而不配置没有任何限制。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top