我刚刚开始研究一个日志库,每个人都可以用它来跟踪用户运行我们的应用程序时的任何类型的系统信息.到目前为止,最简单的示例是跟踪信息,警告和错误.
我希望所有插件都能够使用此功能,但由于每个开发人员可能对报告的重要性有不同的想法,因此我希望尽可能保持通用.
在C++世界中,我通常会使用像a这样的东西stl::pair
作为键值对结构,并stl::list
在日志中使用其中的一行作为"行".然后日志缓存就是list
(呃!).这样,开发人员可以使用像INFO,WARNING,ERROR这样的const字符串键来为数据库中的列提供一致的命名(用于选择特定类型的信息).>>
我希望数据库能够处理任意数量的不同列名.例如,John可能有一个INFO行,其中一列名为USER,而Bill可能有一个INFO行,其中一列名为FILENAME.我希望日志查看器能够显示所有信息,如果一个报表没有INFO/FILENAME的值,那么这些字段应该只显示为空白.因此,一种选择是使用List
>,另一种选择是让日志库使用者以某种方式"注册"其模式,然后让数据库执行>
ALTER TABLE
处理这种情况.另一个想法是拥有一个仅用于键值对的表,其中一个外键将键值对映射回原始日志条目.
我显然不希望记录到陷入瘫痪系统,所以我只锁定日志高速缓存,使数据的副本(并删除已复制的数据),那么后台线程将转储信息到数据库中.
我对此的具体问题是:
你看到任何性能问题吗?换句话说,你有没有试过这样的事情,发现某些事情在实践中效果不好?
是否有更多的.NETish方法来实现键值对,除了List
?>>
即使有办法更好地做#2,我上面提出的ALTER TABLE的想法是不是很糟糕?
你会推荐一个多个数据库吗?我还不知道日志写入的频率,但理想情况下我们希望有大量的低级信息.也许应该有一个只有低级别东西的固定模式的数据库,然后是另一个更灵活地向用户报告信息的数据库.
Claudio Redi.. 10
你为什么不查看log4net?它可能足以满足您的目的,您可以避免重新发明已多次发明的车轮:-)
这里有一些关于如何在数据库中存储日志记录信息的配置示例:
http://logging.apache.org/log4net/release/config-examples.html
你为什么不查看log4net?它可能足以满足您的目的,您可以避免重新发明已多次发明的车轮:-)
这里有一些关于如何在数据库中存储日志记录信息的配置示例:
http://logging.apache.org/log4net/release/config-examples.html