Java日志混乱

每个应用程序都需要记录日志。 现在,对于在Java中确切使用什么有很多选择。 最著名的框架是:log4j,logback,commons-logging,slf4j,java.util.logging。 还有更多的东西–时不时有人决定编写自己的记录器–只需转到IDE的“打开类型”对话框并键入“记录器”(更不用说有些人使用名称“ Log”)。 还有ServletContext.log(..)和类似的东西。 确实是一团糟。 但是,让我们从一些历史开始(注意:这是该主题的另一篇文章 )。

首先是System.out和System.err。 但是它们不灵活,因此就需要功能丰富的日志记录(请注意,当时我在上小学)。 可以定制格式记录的日志,可以记录到多个目标(文件,控制台,电子邮件等)。因此log4j出现在1999年

但是也产生了其他解决方案,包括java.util.logging –尝试使用标准JDK日志记录。 事实证明,这是一次非常成功的尝试。 java.util.logging于2002年初与JDK 1.4一起出现。几个月后,由于意识到所有现有记录器都需要一个通用日志记录接口,导致apache common-logging

Commons Logging的想法是可行的–库不应在使用它们的应用程序上强制执行特定的日志记录实现。 因此,每个日志记录实现都适应于库使用的通用API –因此您的库不使用org.apache.log4j.Logger –它使用org.apache.commons.logging.Log,并将其委托给任何日志记录框架存在于类路径上。 这样,您的项目可以使用多个库,并对所有库使用单个日志记录配置。

但是公共记录不足。 人们说它造成的问题多于解决的问题。 所以的log4j的作者- CekiGülcü SLF4J(简单记录门面为Java) -创建了一个新的项目在2005年 。 它旨在成为更好的公共记录。

Log4j自1999年以来已被广泛使用,但是它还不够好,所以请猜测谁创建了一个新项目– logback。 再次是CekiGülcü。 为什么要一个新项目? 好吧,我想是出于政治原因和需要从头开始替换的旧代码库的结合。 无论如何,logback出现在2006年。它比log4j好吗? 塞基在这里解释

所以回到今天-有很多日志记录框架和两个外观-commons-logging和slf4j。 每个库都使用不同的库,而且情况一团糟。 版本不匹配,类路径上有大量Logger类。 Maven通过至少不允许同一日志记录实现的多个版本而成功地简化了这一过程,仅此而已。 而且,如果您不了解上面的所有历史记录以及哪个框架用于什么,那么您的项目很可能会遭受这种混乱。

有什么解决方案? 最简单的方法是使用slf4j和logback。 为什么?

  • slf4j具有许多现有实现的桥梁。 这意味着您将删除log4j.jar并使用log4j-over-slf4j.jar –它在同一软件包中具有相同的类,只是实现有所不同–它委托使用中的当前slf4j实现。 这样,所有使用log4j(或任何其他桥接实现)的库都将与您的logback配置一起使用。 不幸的是,这在java.util.logging中不能很好地工作,因此您必须希望不要有太多的库决定“最小的依赖范围”。
  • logback优于log4j(相同作者-较新的实现,从以前的错误中学习)
  • 如果出现了比登录更好的框架,则可以轻松切换到该框架而无需更改类。

最后,介绍一下日志记录配置。 它应该在外部,以与其他外部化项目配置相同的方式(最好在相同的位置)。 然后,您应该基于系统的“ config.location”属性加载它。

(在基于Spring的Web应用程序中,有Log4jWebConfigurer ,但没有LogbackWebConfigurer 。幸运的是,它很容易编写,并且有一些基于log4j的现有实现。在web.xml中, logbackConfigLocation参数应该是: file://${config.lotation}/logback.xml

为什么这么简单的事情变得如此复杂? 因为这并不简单。 最初没有考虑太多因素,因此需要在以后进行纠正。 自2006年以来该领域未发生重大变化是一件好事,因此我们可以认为情况保持稳定。

参考: Bozho的技术博客上来自我们的JCG合作伙伴 Bozhidar Bozhanov的 The Logging Mess

相关文章 :


翻译自: https://www.javacodegeeks.com/2011/09/java-logging-mess.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值