C# 创建日志系统

Posted

技术标签:

【中文标题】C# 创建日志系统【英文标题】:C# Creating a log system 【发布时间】:2010-12-06 09:38:58 【问题描述】:

我正在阅读以下文章: http://odetocode.com/articles/294.aspx

这篇文章向我提出了很多关于日志的问题。 (我不知道我是否应该在单独的问题中提出这个......但我不想用我的问题向 ***.com 发送垃圾邮件)

第一个是我是否应该将其存储在 .txt 或 .xml 文件中……甚至是数据库内的表中。 在性能方面可能保存在 .txt 中会更好。但是当有人需要在 .txt 文件中查找某些内容时,它可能会成为......脖子上的痛苦。 那么……我应该使用哪一个,为什么?

第二个,有没有专门的类来处理“日志”的事情? 我已经阅读了几个关于这个主题的主题,但我没有找到我的问题的答案。

提前致谢。

【问题讨论】:

【参考方案1】:

关于文件还是数据库,由你来选择。

文件日志提供更好的性能,但访问困难。

如果日志只是为了很少提供信息(例如应用程序崩溃并且您需要知道原因),则最好将日志存储在文件中。

如果您想授予对这些日志的访问权、分析它们等,您应该将它们存储在数据库中。

.net 确实不是我的专区,但有很多理由让您应该使用框架的日志记录类。

【讨论】:

【参考方案2】:

我过去采用的最简单的方法是使用 log4net。这样您就可以在配置文件中配置日志记录。如果您需要它进入数据库,请将其设置为这样。如果您想在发生重大错误时收到通知,请按此方式进行设置。

就日志排序而言,这实际上取决于您要采用的方法,以及您计划记录多少。通常我登录到一个平面文本文件,因为我没有在我的应用程序中启用大量登录。所以解析它们并不是什么大问题。

【讨论】:

log4net 很棒 - 我强烈建议尝试一下 詹姆斯好。电锯可以在logging.apache.org/chainsaw/index.html找到【参考方案3】:

除非你想编写一个用于教育目的的系统,否则我真的认为你最好还是坚持使用log4net 或nlog。

此外,您最好研究这些系统的代码,而不是自己编写代码。

至于您的问题,我会坚持使用文本文件并在将消息发送到磁盘之前对其进行缓冲。

【讨论】:

【参考方案4】:

为什么要发明***?您可以查看 MS 企业库 Logging Block。

【讨论】:

【参考方案5】:

绝对不是 xml。

使用 xml,您需要全部读取、解析、添加任何内容,然后再次生成整个 xml,并将其写回硬盘。每次你记录一些东西。

当然,除非您手动将节点附加到 xml 文件中,否则您会失去大部分 xml 优势。

对致命错误的警告-如果应用程序崩溃,任何可以帮助您调试应用程序的东西-我会将这些日志存储在 txt 文件中。 为每个条目添加一个新行。

通过这种方式,您也可以要求您的用户进行检查(如果您通过电话协助他)。

如果它不是元日志,例如上面提到的,换句话说,如果它是与程序本身相关的任何内容,您可能需要分析 - 保留在 db 上。

【讨论】:

【参考方案6】:

对于我的应用程序,我选择写入 db。以这种方式阅读日志更容易(对我来说)。但是,我不会像某些人那样疯狂地记录,我只记录我需要记录的内容,而不记录其他内容。

不久前我尝试了 log4net,但一点也不喜欢它。只是写到数据库并发送电子邮件是一大堆垃圾。我最终编写了一个自定义日志记录类,整个过程大约 200 行,只用了几个小时。它很好用,我没有其他依赖项,并且可以轻松更改。

【讨论】:

它不会告诉我给出的错误但是它会告诉我查询崩溃并且我记录给查询的值是什么。我从来没有一个无法复制的。【参考方案7】:

NLog 和 log4net 都提供了丰富的日志 API,但都没有解决您在管理和分析日志文件中的所有数据时面临的挑战。

如果您愿意考虑使用商业工具,请查看GIBRLATAR - 它适用于NLog 和log4net,还可以收集有用的performance metrics。最重要的是,GIBRALTAR provides great tools for managing and analyzing logs。

【讨论】:

【参考方案8】:

如果您正在处理 ASP.NET,ELMAH 是另一个很好的日志记录工具。这显然是微软的 Scott Hanselman uses。

不过,它确实需要一些additional code 才能使其与 ASP.NET MVC 的 HandleError 属性一起使用。

【讨论】:

以上是关于C# 创建日志系统的主要内容,如果未能解决你的问题,请参考以下文章

C# 系统 日志类

C# 系统 日志类

C# 打开系统日志文件时显示文件路径有问题

C#通过WMI的wind32 的API函数实现msinfo32的本地和远程计算机的系统日志查看功能

iOS-创建自己的日志系统

C#读取Windows日志