首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >日志框架是个好主意?

日志框架是个好主意?
EN

Stack Overflow用户
提问于 2009-10-22 09:37:46
回答 10查看 2.5K关注 0票数 9

首先,为主观的标题道歉。这是一个直接的问题。

目前,我正在开发一套工具:

  • 一个C# Windows,主要用于维护一个Oracle数据库。
  • 一个C# Windows (将在多个节点站点上使用)处理数据库的内容。
  • 一个ASP.NET网络接口,方便对整个“系统”的管理

目前,tho Windows服务已被开发为控制台应用程序(以方便调试/开发),我正在将这些应用程序转换为Services。在使用这些服务进行了几天的测试之后,我发现我希望增加日志记录的粒度。我发现我错过了Console.WriteLine(),我想为这种类型的输出提供一个类似于平面文件的备用日志源。这让我想,“我应该使用一个框架,还是我得到的足够多?”

我之所以提到我正在发展的方面,是为了洞察我的处境。已经创建了一个“核心”DLL,在所有组件中都是通用的,它抽象出应用程序和数据库之间的交互层。正是在这个DLL中创建了一个类,它将尝试“登录到数据库中的一个表”“日志到本地事件日志”。就是这样,这就是伐木的范围。

在上述工具中,有多个日志记录实例,这些实例与:

代码语言:javascript
复制
Log.LogError("Code", e.Message + "\n" + e.StackTrace);

虽然非常基本,但这种方法确实利用反射来识别错误的来源。

我的问题

看看我当前的日志解决方案,它在它所做的工作以及它如何与我的所有解决方案集成方面看起来“足够了”。然而,我一直在研究日志记录框架(特别是log4net),它们的特性给我留下了深刻的印象。如果将来需要的话,添加另一种输出格式(例如SMTP服务器)对我来说听起来很酷!:)

我想知道的是迁移到框架(比如log4net)的好处?我需要在多大程度上调整代码?不管我是不是在看另一边更绿的草?最后,也许最重要的是,我做的是对的吗?我应该将日志类的功能添加到"LogDebug“中并完成吗?我最不想做的就是彻底修改我的套房,只是为了一个“基本”功能,但如果还有其他好处(设计、依赖、良好实践)呢?等)我很感兴趣。

谢谢,

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2009-10-22 09:49:51

在多个远程系统上运行代码时,正确的日志记录特别有益,据我所知,log4net将允许您将日志发送到远程syslog服务器,而不需要太多的编码开销(这意味着您可以在一个集中的地方从所有计算机上查看日志),这样做将大大减少您获取与系统的缺陷或问题相关的信息所需的时间,并且还应该可以指示该问题有多普遍。

正如在其他文章中提到的,log4net还允许多个附加程序和多个日志级别,因此确定您希望在哪里存储某些日志信息(例如,在数据库中或在本地平面文件中,嘿嘿log4net甚至允许您在telnet上吐出日志)是绝对困难的。

至于它的实现,有几个很好的站点可以通过设置与您交流。如何实际使用log4net提供的日志对象是一种体系结构选择,但您可以简单地更改对象的构造函数以获取log4net对象,并且在该对象中,只需像使用Console.WriteLine一样使用log4net对象。

我发现教程系列这里特别有用,它还将深入到比我在这里更深入的关于配置log4net的好处和不同方法。

票数 6
EN

Stack Overflow用户

发布于 2009-10-22 09:42:28

是。使用现有的、经过验证的日志记录框架(如Log4net)是一个好主意。

Log4Net在运行时是可配置的(很适合跟踪生产代码中的问题)。

正如一位评论者所指出的,它也很容易使用。

票数 13
EN

Stack Overflow用户

发布于 2009-10-22 09:44:30

是的,您肯定希望使用日志框架。日志框架将允许您:

  • 为不同的记录器实例设置日志记录级别。
  • 为每个不同的记录器实例设置“追加器”或输出。

也许,更重要的是,如果使用日志框架,很容易将日志框架的一个实现替换为另一个实现(可能是一个空实现,它只会丢弃消息);然而,如果直接编写所有日志语句,则交换实现将是一场噩梦。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1606088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档