我想将信息记录到文件中,想知道使用Java Logger类是否比我自己的日志记录方法更有优势?
我知道使用Logger只需将自己的FileHandler添加到Logger即可。我的个人方法只是使用FileOutputStream。
对于大多数情况,标准的日志框架是最好的选择。它们非常灵活。但是使用自己的实现也可以是一个有效的选项,特别是如果我们不是在谈论传统的日志记录(全局调试、问题、警告消息),而是关于特定的信息消息或会计。
除其他因素外,请记住,日志记录的标准化允许第三方库进行合作。例如,如果您有一个使用(比如)Hibernate的标准Web应用程序,并且已配置了标准的Java日志记录库,则不仅可以从自己的代码中记录日志,还可以告诉Hibernate将调试信息记录到您的日志文件中(不一定是相同的文件)。这非常有用-几乎是必须的。
如果您使用纯FileOutputStream编写自己的日志记录库,则必须决定-除其他事项外-是否保持文件打开,还是在每次写入时重新打开-追加-关闭,并且您必须考虑同步和相关问题。虽然没有什么特别复杂的地方。
日志记录器提供了定义记录消息重要性级别和使用不同输出接收器(如控制台、文件等)的能力。
此外,当使用日志记录器时,轻松启用或禁用某些类型的消息 - 例如,在生产环境中您不想看到每个调试消息。
我总是更喜欢经过社区测试和批准的东西,而不是还需要大量测试的东西。日志记录器允许您执行许多操作,这将花费您一些时间来实现和测试解决方案的健壮性。一个重要的优点是下一个使用您代码的人的专业知识,如果它是您的日志记录器,通常需要更长时间学习它的工作原理,因为有更多的示例和文档可用于java.util.logger。
就像其他人提到的一样,使用更常见的日志系统比编写自己的日志系统有更多的优势。老实说,Java util logging api 的可配置性和扩展性远不如你在互联网上找到的其他库。
请记住,自己编写日志系统总是有缺点的,因为它经过的测试较少,因此更容易出现故障或跳过一些可能非常重要的消息。
个人而言,我更喜欢使用 SLF4J,因为它允许我插入适配器以支持更常用的日志框架,然后让我选择自己的实际日志实现,这解决了不同库作者偏爱不同日志框架的大部分问题。如果你认为自己有能力完成任务,你也可以为 SLF4J 编写一个实现 ;)