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

本文关键字:文本 文件 数据库 最佳 日志 记录 NET | 更新日期: 2023-09-27 18:04:21

我有一个工具,我的团队使用它来完成各种管理任务,它处理各种远程调用、Active Directory查找、调用脚本等,以支持数千台机器。我有十几个人在积极地使用它,但是对于极客和进一步的开发,我想建立一些统计和使用日志(不是个人的,只是看看使用了什么和多少)。

我的问题是,在。net(特别是c#)中记录这些信息的好方法(甚至是最好的方法)是什么?

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

我真的不想用太多的文本文件,只是为了文件夹干净。

任何符合以下标准的建议:

  1. 重量轻
  2. 快速
  3. 客户端没有安装
  4. 稳定不易损坏
  5. 本地数据库,如

我试着谷歌这个,但我没有得到任何对我来说真正有意义的东西,这可能是我不知道我应该谷歌什么,因为这不是我的典型使用模式。

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

Microsoft SQL Server Compact是一个可嵌入的、免费的、可重新发布的数据库引擎,具有良好的。net api。无需安装;你只需要从。net项目中引用数据库引擎库,就可以了。数据库是简单的文件,你可以存储在任何地方,也可以像其他文件一样移动。

它与"真正的"SQL Server非常相似,所以如果你需要的话,两者之间的数据迁移应该很容易,并且有很多工具可以帮助你做到这一点。

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

的例子:

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

使用Log4Net并从应用程序中解耦数据接收器。Log4Net允许您记录文件、数据库、Windows事件日志和其他日志。你甚至可以根据日志级别(致命、错误、警告、信息等)和其他过滤条件,将日志输出直接输出到不同的目的地。

你甚至可以写你自己的appender来做你需要的。

通过更改您的log4net配置。您甚至可以在应用程序运行时调整log4net配置。例如,考虑一个长时间运行的守护进程,设置了日志记录,以捕获整个应用程序中相当高级别的消息。如果您的日志突然开始显示记录的错误突然增加,您可能需要将日志记录降至更细粒度的级别,以了解发生了什么。或者在可疑类或程序集上将其降低到非常细粒度的级别,以隔离问题细节。

使用log4net,您可以通过调整配置文件来实现这一点,而无需弹出守护进程。