使用Logging框架有什么意义?
我想我可能缺少为应用程序使用日志记录框架的意义。在所有小型应用程序中,我总是编写一个小的" Logging"类,并将日志消息传递到其中的方法中,该方法将被写入文件。
诸如log4net之类的第三方日志记录框架的目的是什么?记录日志写操作是线程安全的还是我遗漏了一些东西?
解决方案
我们可能想要切换到登录数据库以获取某些消息,或者是一个警报系统,该页面对受支持的穷人进行寻呼
但是,更重要的是,大多数日志记录框架允许我们指定不同类的日志级别,因此我们不需要每次想要更多/更少的日志记录时就剪切新的二进制文件(冗长的日志记录只是我们在生产中发现的错误)
Log4Net的站点有更多详细信息
取决于我们自己的日志记录系统实现的智能程度。
在Java中,如果我们想继承日志类型等,可能会很麻烦,因此我们更喜欢Log4J之类的第三方工具。我认为C#也有类似的事情。同样,如果要从命令行确定日志级别。
如果我们只想路由所有System.out并控制是否在每次编译时打印它们,那么我们自己的记录器就可以了。
一言以蔽之:灵活性。 Log4xxx使我们能够执行不同的日志记录级别,将不同的代码模块记录到不同的文件中,并且无论遇到什么奇怪的情况,都可以依靠它来确保可靠性(如果磁盘空间不足,记录器将如何处理) ?)
其他注释被忽略了:如果已经有一个库可以满足需求,那么我们就不必编写代码了。
可能我们是在这里玩语义:对我来说,"日志记录框架"通常只不过是一个将日志消息写入文件的类而已。因此,我们要做的就是编写自己的日志记录框架。既然我们已经这样做了,那么"使用Logging框架"显然有一点意义!
最终,我们将需要确保它正确处理并发日志记录(锁定输出流),可以记录到文件,系统日志等,可以进行日志滚动等。我们可以使用别人的经过良好测试的代码来节省自己的时间。
日志记录框架提供了灵活性,并防止我们重新发明轮子。我知道以任何现代语言将文件添加到文件中都非常容易,但是家乡记录器是否有多个目标?我们可以在运行时打开和关闭登录吗?当这些轮子免费提供时,为什么要冒泄气的风险?
这是一个很好的问题。
第一个原因是"为什么不呢?"如果我们使用的是日志记录框架,那么我们将获得使用已打包内容的可维护性的好处。
第二个原因是日志记录很微妙。不同的线程,会话,类和对象实例可能会在日志记录中发挥作用,并且我们不需要立即解决此问题。
第三个原因是我们可能会在代码中发现性能瓶颈。弄清楚代码很慢,因为我们正在写入文件而没有缓冲,或者硬盘驱动器的磁盘空间已用完,因为记录器无法翻转和压缩旧文件可能会让人头疼。
第四个原因是我们可能希望追加到syslog或者写入数据库,套接字或者其他文件。框架具有内置的此功能。
但实际上,第一个答案是最好的答案。编写自己的脚本几乎没有好处,并且有很多弊端。