我想我可能会忽略为应用程序提供日志框架的重点。在所有的小应用程序中,我总是编写一个小的“Logging”类,只是将日志消息传递给写入文件的方法。
像log4net这样的第三方日志框架的目的是什么?它是使用日志写入操作进行线程安全还是我遗漏了什么?
答案 0 :(得分:21)
这是一个很好的问题。
第一个原因是“为什么不呢?”如果您使用的是日志框架,那么您将获得使用已经打包的东西的可维护性优势。
第二个原因是伐木是微妙的。不同的线程,会话,类和对象实例都可以在日志记录中发挥作用,并且您不希望必须即时解决此问题。
第三个原因是您可能会在代码中发现性能瓶颈。确定您的代码很慢,因为您正在写入文件而没有缓冲或者您的硬盘驱动器磁盘空间不足,因为记录器没有翻转并压缩旧文件可能会让您感到痛苦。
第四个原因是您可能希望附加到syslog,或写入数据库,或套接字或不同的文件。框架内置了此功能。
但实际上,第一个答案是最好的答案;写自己的好处和一大堆缺点都没什么好处。
答案 1 :(得分:3)
您可能希望切换到某个消息的数据库日志,或者为支持穷人打电话的警报系统
更重要的是,大多数日志记录框架允许您指定不同类的日志级别,因此每次需要更多/更少日志记录时都不需要剪切新的二进制文件(详细记录您刚刚在生产中发现的错误)< / p>
Log4Net's site有更详细的信息
答案 2 :(得分:2)
总之:灵活性。 Log4xxx使您能够执行不同的日志记录级别,将不同的代码模块记录到不同的文件中,并且无论遇到什么奇怪的情况,您都可以依赖它(如果磁盘空间不足,您的记录器会做什么? ?)
答案 3 :(得分:2)
其他评论遗漏的内容:如果已经有一个可以满足您需要的库,那么可以节省您编写代码的费用。
可能你在这里玩语义:对我来说,“日志框架”通常 只是一个将日志消息写入文件的类......所以你所做的就是编写自己的日志框架。鉴于您已经这样做了,“使用Logging框架”显然有一些点!
最终,您需要确保它正确处理并发日志(锁定输出流),可以记录到文件,syslog等,可以进行日志滚动等等。您可以使用其他人经过充分测试的代码来节省您的工作量。
答案 4 :(得分:1)
取决于您自己的日志记录系统实施的智能程度。
在java中,如果你想继承日志类型等,它可能太麻烦了,你更喜欢像Log4J这样的第三方工具。我假设C#有类似的东西。同样,如果要从命令行确定日志级别。
如果您只想路由所有System.out并控制它们是否在编译时打印,那么您自己的记录器就可以了。
答案 5 :(得分:1)
记录框架提供了灵活性,可以防止您重新发明轮子。我知道用任何现代语言附加到文件都很简单,但是你家里的记录器有多个目标吗?你能在运行时打开和关闭登录吗?当这些车轮可以免费使用时,为什么要冒瘪胎呢?
答案 6 :(得分:0)
仅出于争论的缘故,为什么没有成熟的家种?没有多余的行李,您可以完全控制它。
大多数Logging框架具有太多的功能,我们实际上不会使用其中的大多数功能,并且说它们自带行李(它不是类,而是框架)。为什么不实现一个简单的本地增长日志记录,其中所有应用程序都将日志写入队列,而简单的脱机服务(可能是Windows服务)读取队列并将其写入所需的位置(文件,数据库等)。通过使用队列,您可以实现异步操作并且没有锁定问题。