每个应用程序都需要日志记录。现在,对于在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
http://www.itangyuan.com/tag/568993.html
最后,谈谈日志记录配置。它应该是外部的,以与另一个相同的方式(和相同的位置,最好,您应该基于一个系统“config.Location”属性加载它。
(在基于春季的web应用程序中,Log4jWebConfigurer
,但没有LogbackWebConfigurer
。幸运的是,编写起来很简单,并且有一些基于log4j的现有实现。在web.xml中,logbackConfigLocation
Param应是: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支持自定义类型,因此有一个解决方案:
@Column @Type(type="........PersistentDateTime") private DateTime fromDate;
然而,当Hibernate版本更改时,这些库可能会出现问题。因此,您可能需要扩展PersistentDateTime
类,并在@Tpe映射中使用您自己的类。
在整个项目中使用joda时间将节省大量的头痛。因此,我强烈建议上述机制也可以在Hibernate实体中使用joda-time。