Java教程

用程序都需要日志记录逻辑

本文主要是介绍用程序都需要日志记录逻辑,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

每个应用程序都需要日志记录。现在,对于在Java中登录的确切用途有很多选择。最著名的框架是:log4j、Logback、Common-Logging、slf4j、java.util.log。还有很多--不时有人决定写自己的记录器--只需转到IDE的OpenType对话框并键入“Logger”(更别提有些人使用“Logger”)了。还有ServletContext.log(..)诸如此类的事。真是一团糟。但是让我们从一些历史开始(注意这一专题)。

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

但也产生了其他解决方案,包括java.util.Logging--一种尝试使用标准JDK日志记录的方法。事实证明,这并不是一次非常成功的尝试。2002年初,JDK1.4中出现了java.util.Logging。几个月后,所有现有的记录器都需要一个通用的日志接

共享日志的思想是可行的-库不应该强制在使用它们的应用程序上实现特定的日志。因此,每个日志实现都会适应库使用的公共API--因此库不使用org.apache.log4j.Logger--它使用org.apache.Commons.logging.log,并将其委托给类路径上存在的任何日志框架。这样,您的项目就可以使用多个库,并对所有库使用单一的日志配置。

但公地伐木还不的问题比它所解决的要多。所以log4j的作建了一个新项目-slf4j(用于Java的简单日志外观的目标是成为一个更好的共用日志。

Log4j自1999年以来一直被广泛使用,但是它还不够好,所以猜猜谁创建了一个新项目-Logback。又是Ceki Gülcü。为什么是新项目?好吧,结合政治原因和旧的代码基础需要从地面上替换,我想。无论如何,Logback出现在2006年。怎么会比log4j更好呢?塞

所以回到现在-有很多日志记录框架和两个外观-公用日志记录和slf4j。每个图书馆都使用不同的图书馆,而且这是一堆乱七八糟的东西。版本不匹配,类路径上有大量的Logger类。Maven通过至少不允许同一日志实现的多个版本成功地简化了这一点,但仅此而已。如果您不知道上面所有的历史以及用于什么的框架,那么您的项目很可能会受到这种混乱的影响。

解决办法是什么?我认为最好的方法是使用slf4j和Logback。为什么?

https://aoliji50371.lofter.com/post/4d00663d_1cd12ace7

  • Slf4j为许多现有实现提供了桥梁。这意味着您要删除log4j.jar并使用log4j-over-slf4j.jar-它在同一个包中有相同的类,只有实现不同--它将委托给正在使用的当前slf4j实现。这样,所有使用log4j(或任何其他桥接实现)的库都将与您的Logback配置一起工作。不幸的是,这在java.util.Logging中工作得不太好,所以您必须希望不要有太多的库来决定“最小的依赖空间”。
  • Logback比log4j(相同的作者-更新的实现,从以前的错误中学习)更好。
  • 如果出现比Logback更好的框架,您可以轻松切换到它,而无需更改类。

http://www.itangyuan.com/tag/568993.html

最后,谈谈日志记录配置。它应该是外部的,以与另一个相同的方式(和相同的位置,最好,您应该基于一个系统“config.Location”属性加载它。

(在基于春季的web应用程序中,Log4jWebConfigurer,但没有LogbackWebConfigurer。幸运的是,编写起来很简单,并且有一些基于log4j的现有实现。在web.xml中,logbackConfigLocationParam应是:file://${config.lotation}/logback.xml)

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

https://m.douban.com/mip/note/813544668/

这始终是一个问题--如何映射Hibernate实体中的时态数据--是使用java.util.Date、java.util.Calendar还是简单使用Long。正确的答案是:这两个问题都没有。使用实上的Java datetime API。在整个项目中使用它是不需要考虑的,但是如何将它与Hibernate一起使用--您不能使用@Temporal。Hibernate支持自定义类型,因此有一个解决方案:

  • 对于H
@Column
@Type(type="........PersistentDateTime")
private DateTime fromDate;

然而,当Hibernate版本更改时,这些库可能会出现问题。因此,您可能需要扩展PersistentDateTime类,并在@Tpe映射中使用您自己的类。

在整个项目中使用joda时间将节省大量的头痛。因此,我强烈建议上述机制也可以在Hibernate实体中使用joda-time。

这篇关于用程序都需要日志记录逻辑的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!