用法日志的.NET最佳实践 - 文本文件?数据库?

时间:2013-03-15 16:58:42

标签: c# .net database sqlite usage-statistics

我有一个工具,我的团队用于各种管理任务,它处理各种远程调用,Active Directory查找,调用脚本等,以支持数千台计算机。我有十几个人积极使用它,但是对于geekdom和进一步开发我想建立一些统计和使用记录(没有个人的,只是为了看看使用了什么和多少)。

我的问题是,在.NET(特别是C#)中记录这些信息会是一种好的(甚至最好的)方式吗?

我的第一个想法是TXT文件甚至XML文件,但我不知道我真的想要在以后的路上反复加载未知大小的文件。所以我想到了SQLite,但我不想在每台机器上安装.SQlite,虽然我可以将它嵌入到exe中(它是从一个共享运行的,而不是大多数用户的安装,虽然我也有一个为它

我真的不想使用大量的文本文件,只是为了清理文件夹。

任何符合以下条件的建议:

  1. 重量轻
  2. 快速
  3. 客户端无法安装
  4. 稳定难以腐败
  5. 本地数据库,如
  6. 我试图谷歌这个,但我没有得到任何真正对我有意义的东西,可能是我不知道我应该谷歌,因为这不是我的典型使用模式。

3 个答案:

答案 0 :(得分:2)

Microsoft SQL Server Compact是一个可嵌入,免费,可再发行的数据库引擎,具有良好的.NET API。无需安装;您只需从.NET项目中引用数据库引擎库即可。数据库是简单的文件,您可以存储在任何地方并像其他文件一样移动。

它与“真正的”SQL Server非常相似,因此如果您需要,两者之间的数据迁移应该很容易,而且有很多工具可以帮助您解决这个问题。

答案 1 :(得分:2)

您可以使用db4o。它是一个面向对象的数据库(没有SQL),可以直接保存对象 - 不需要对象映射,属性或任何配置开销,只需要使用POCO并保存它们。您可以使用不同的查询方法,例如Query by example或SODA(类似于Hibernate的条件),它还具有完整的LINQ支持。您可以使用db4o作为嵌入式数据库(使用文件),内存占用非常小。无需安装,只需将lib包含在项目中即可。

示例:

var persons = db.Query<Person>( s => s.Age > 50 );

答案 2 :(得分:0)

使用 Log4Net 并将数据接收器与应用分离。 Log4Net允许您登录到文件,数据库,Windows事件日志等。您甚至可以通过记录级别(致命,错误,警告,信息等)和其他过滤条件,根据日志输出到的不同目的地将日志输出定向到不同的目的地。

您甚至可以编写自己的appender来满足您的需求。

全部通过更改log4net配置。您甚至可以在应用程序运行时调整log4net配置。例如,考虑一个长期运行的守护进程,其日志记录设置为在整个应用程序中捕获相当高级别的消息。如果您突然登录开始显示记录的错误突然增加,您可能希望将记录下调到更精细的级别以了解正在发生的事情。或者可能在可疑类或程序集上将其调低到非常精细的级别以隔离问题详细信息。

使用log4net,只需调整配置文件即可,无需弹回守护进程。