使用Logging框架有什么意义?

我想我可能会忽略为应用程序提供日志框架的重点。 在所有小应用程序中,我总是编写一个小的“Logging”类,只是将日志消息传递给写入文件的方法。

第三方日志框架如log4net的目的是什么? 它是日志写入操作的线程安全还是我遗漏了什么?

这是一个很好的问题。

第一个原因是“为什么不呢?” 如果您使用的是日志框架,那么您将获得使用已打包的东西的可维护性优势。

第二个原因是伐木是微妙的。 不同的线程,会话,类和对象实例都可以在日志记录中发挥作用,并且您不希望必须动态地解决此问题。

第三个原因是您可能会在代码中发现性能瓶颈。 确定您的代码很慢,因为您在没有缓冲的情况下写入文件或者您的硬盘驱动器磁盘空间不足,因为记录器没有翻转并压缩旧文件可能会让您感到痛苦。

第四个原因是您可能希望附加到syslog,或写入数据库,或套接字或不同的文件。 框架内置了此function。

但实际上,第一个答案是最好的答案; 编写自己的优点并没有什么好处,以及一大堆缺点。

您可能希望切换到某个消息的日志记录到数据库,或者是一个警告系统,该消息系统会向穷人提供支持

更重要的是,大多数日志框架允许您指定不同类的日志级别,因此每次需要更多/更少日志记录时都不需要剪切新的二进制文件(对于您刚刚在生产中发现的错误进行详细日志记录)

Log4Net的网站有更多细节

总之一句:灵活性。 Log4xxx使您能够执行不同的日志记录级别,将不同的代码模块记录到不同的文件中,并且无论它遇到什么奇怪的情况,您都可以依赖它(如果磁盘空间不足,您的记录器会做什么? ?)

其他注释省略的东西:如果已经有一个库可以执行您想要的操作, 则可以节省您编写代码的时间

可能你在这里玩语义:对我来说,“日志框架”通常只是一个将日志消息写入文件的类……所以你所做的就是编写自己的日志框架。 鉴于您已经这样做了,“使用Logging框架”显然有一些意义!

最终,您需要确保它正确处理并发日志(锁定输出流),可以记录到文件,syslog等,可以进行日志滚动等等。 您可以使用其他人经过良好测试的代码来节省您的工作量。

取决于您自己的日志记录系统实现的智能程度。

在java中,如果你想inheritance日志类型等,可能会有太多麻烦,你更喜欢像Log4J这样的第三方工具。 我假设C#有类似的东西。 同样,如果要从命令行确定日志级别。

如果您只想路由所有System.out并控制它们是否在编译时打印,您自己的记录器就可以了。

记录框架提供了灵活性,可以防止您重新发明轮子。 我知道用任何现代语言附加到文件都很简单,但是你家的记录器有多个目标吗? 你能在运行时打开和关闭登录吗? 当这些车轮免费提供时,为什么要冒瘪胎呢?

只是为了争论,为什么不成熟的家庭成长? 没有任何额外的行李,你可以完全控制它。

大多数Logging框架都有太多的function,我们真的不会使用它们中的大多数并且说它们带有自己的行李(它不是一个类,它是一个框架)。 为什么不实现简单的本地日志记录,其中所有应用程序都将日志写入队列,而简单的脱机服务(可能是Windows服务)读取队列并将其写入所需位置(文件,数据库等)。 通过使用队列,您可以实现异步操作并且没有锁定问题。