我有一堆现有的客户端/服务器应用程序正在进行中。偶尔,客户端会想要添加某种类型的Web界面来访问部分数据。这些通常是定制的,虽然有些是“通用的”;但是每个人在自己的VM中都有自己的“实例”。
我想要的是一个集中区域来捕获和记录任何这些虚拟机上出现的任何错误。
我正在创建一个新数据库并设置WCF服务,以使这些Web应用程序能够在我的集中式数据库和本地EventLog中创建日志条目。
这是一个糟糕的设计吗?
更新
Web应用程序位于2003 / IIS6和2008 / IIS7中,内置于ASP.NET中。许多实例位于一对Web服务器上,但许多实例将部署到各个VM。
答案 0 :(得分: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等工具。
答案 1 :(得分:3)
您应该看看ELMAH(错误记录模块和处理程序)(http://code.google.com/p/elmah/)与Orbit One的异常报告器(http://aspexceptionreporter.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=35343)的组合,当它们合并时可以为您提供企业范围的错误覆盖在集中位置报告。
答案 2 :(得分: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没有任何限制,允许添加没有配置的系统。