Java 中的日志记录是怎么回事?[已关闭]

2022-08-31 09:06:16

为什么一个会使用以下软件包之一而不是另一个?

  • Java Logging
  • 共享资源日志记录
  • Log4j
  • 断续器
  • 日志备份

答案 1

按 api 外观的时间顺序(据我所知):

  • Log4j,因为大多数人都使用它(根据我的经验)
  • 共享资源日志记录,因为开源项目使用它(因此它们可以与集成解决方案中使用的任何日志记录框架集成);如果你是一个API/Framework/OSS,并且你依赖于使用Commons Logging的其他软件包,那么尤其有效。
  • Commons Logging,因为你不想“锁定”到一个特定的日志记录框架(所以你锁定到Commons Logging给你的东西) - 我认为用这一点作为理由是不明智的。
  • Java日志记录,因为您不想添加额外的jar。
  • SLF4j,因为它比Commons Logging更新,并提供参数化日志记录:

logger.debug("The entry is {}.", entry);
//which expands effectively to
if (logger.isDebugEnabled()){
    // Note that it's actually *more* efficient than this - see Huxi's comment below...
    logger.debug("The entry is " + entry + "."); 
}
  • Logback,因为它比log4j更新,并且支持参数化日志记录,因为它直接实现SLF4j
  • SLF4j / Logback,因为它是由做log4j的同一个人写的,所以他把它做得更好(根据Ken G - 谢谢。在查看他们早期的新闻帖子时,这似乎很合适)
  • SLF4j,因为他们还发布了一个log4j适配器,所以你不必在旧代码中“切换”log4j - 只需让log4j.properties使用SLF4j及其配置

答案 2

我发现Java中的日志记录令人困惑,不一致,文档记录不佳,而且特别随意。此外,这些日志记录框架之间存在大量的相似性,从而导致重复工作,并且对您实际处于哪种日志记录环境感到困惑。特别是,如果您在严肃的Java Web应用程序堆栈中工作,则通常一次在多个日志记录环境中工作。(例如,休眠可以使用log4j和tomcat java.util.logging)。Apache commons旨在桥接不同的日志记录框架,但实际上只会增加更多复杂性。如果你事先不知道这一点,那真是太令人困惑了。为什么我的日志消息没有打印到控制台等?哦,因为我正在查看Tomcat日志,而不是log4j。另一层复杂性是,应用程序服务器可能具有可能无法识别特定 Web 应用程序的本地配置的全局日志记录配置。最后,所有这些日志记录框架都太复杂了。在Java中登录是一个杂乱无章的混乱,让像我这样的开发人员感到沮丧和困惑。

Java的早期版本没有内置的日志记录框架,导致这种情况。


推荐