暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Windows下,eclipse不同Java环境以及对slf4j和log4j2的使用

Orison的孤独奋斗 2016-09-22
667

http://blog.orisonchan.cc/index.php/2016/09/22/21/


最近在公司做项目,不得已把Java从1.8降低到了1.6,eclipse版本也从Mars降低到了Kelper。各种难用。但是有助于了解更多的配置。

首先说下,Windows下面的环境变量配置中,Java_Home肯定只能有一个。但是在eclipse里面,可以配置多种Java环境。

有一点一定要注意:进入eclipse时候依赖的Java版本。,一定是你系统的Java版本。所以,Java1.6是无法启动eclipse Mars的,因为Mars最低要1.7。

但是在进入低版本eclipse以后,把其他之前高版本做的Java项目导进来,如果还想要用其他Java版本编译,怎么办呢?

打开Windows->Preferences(窗口->首选项),然后在搜索里找Installed JREs,就可以添加多种Java(当然你要确保其他版本的Java你也安装了)。


在我这张图里,我布置了1.6 1.7 1.8三种版本的Java。

那么项目当中如何使用其他版本Java,这个很多人应该都了解的,在项目里点击右键->Properties然后找Java Build Path,Add library来替换掉JRE Library:


另外要注意的是,在Java Compiler里,要把勾勾去掉让下面保持灰色(在这里是因为Kepler里最高只JAVA1.7,我如果需要1.8的库,那么没有对应选项只好保持灰色):



项目的Java配置完毕后,要来说说Log。

其实项目用java1.6编译也完全没有问题,为什么我一定要在某个项目再回归高版本java,原因是因为,slf4j目前官网上最老的包也要java1.7才能使用。不然就会报Unsupported major.minor version 51.0(51.0是Java1.7,52.0是1.8,网上有version号对应Java版本可以自行搜索)。

那么slf4j和log4j什么关系?

通俗点说,slf4j就像一个万金油类,它没有实现真正的日志功能。如果你引入了slf4j的jar和其他常用log的jar,你可以通过建立slf4j的静态对象来使用那些常用log的功能。引用网上一段话:

“如果一个项目已经使用了log4j,而你加载了一个类库,比方说 Apache Active MQ——它依赖于于另外一个日志类库logback,那么你就需要把它也加载进去。但如果Apache Active MQ使用了SLF4J,你可以继续使用你的日志类库而无语忍受加载和维护一个新的日志框架的痛苦。”

另外,slf4j在具体类中输出log会有一个跟其他不一样的地方是{}占位符功能,网上有大把教程。

那么log4j和log4j2又是什么关系?从包名上看,似乎只是log4j-2.x.x和log4j-1.x.x的差别。但是它们的性能相差很大。并且配置方式不一样。

log4j用properties方式和xml方式配置的都有。而log4j2配置用的基本都是xml方式,并且标签使用方式和log4j不同。但是不管是什么方式,你会发现一个配置里一直会有的词汇:appender。

这里只讲两种的xml配置。举两个实际例子:log4j.xml


和log4j2.xml中


差异如何,对比便知。

其中要说一下输出pattern的一些规则,level级别由低到高是:trace debug info warn error fatal,如果你定义级别是trace,那么后面高级别的也输出,如果你定的是fatal,那么只会输出fatal致命错误的Log。%-5level指的是输出的level占五个字符,不足后面补空格,有点类似C语言printf的格式输出。pattern的格式化输出我觉得是跟C挺像的。其他的格式可以自行研究。

假如用slf4j和log4j,那么你需要log4j的包,slf4j的包,以及log4j-slf4j-impl-2.6.2.jar这种格式的包。

另外至于web项目,网上有人说需要再加一个log4j-web的包,亲测没有这个包也能Log输出,可能因为毕竟我的log都只是纯后台的吧。


文章转载自Orison的孤独奋斗,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论