首页 新闻 会员 周边 捐助

Spring是如何把log4j设为它的最终日志记录器的?

0
悬赏园豆:10 [已解决问题] 解决于 2017-03-16 19:51

找了半天代码没找到

为什么这里获得的logger是log4j?

剑握在手的主页 剑握在手 | 菜鸟二级 | 园豆:259
提问于:2017-03-15 10:05
< >
分享
最佳答案
1

LogFactory.getLog()时发生的事情。调用该函数会启动一个发现过程,即找出必需的底层日志记录功能的实现,具体的发现过程在下面列出:  ( 换句话说就是, 有这么多工具,common-logging该使用哪一个呢?这取决于系统的设置,common-logging将按以下顺序决定使用哪个日志记录工具:)

        (1).common-logging首先在CLASSPATH中查找commons-logging.properties文件。这个属性文件至少定义org.apache.commons.logging.Log属性,它的值应该是上述任意Log接口实现的完整限定名称。如果找到 org.apache.commons.logging.Log属相,则使用该属相对应的日志组件。结束发现过程。

        (2).如果上面的步骤失败(文件不存在或属相不存在),common-logging接着检查系统属性org.apache.commons.logging.Log。如果找到org.apache.commons.logging.Log系统属性,则使用该系统属性对应的日志组件。结束发现过程。
        (3).如果找不到org.apache.commons.logging.Log系统属性,common-logging接着在CLASSPATH中寻找log4j的类。如果找到了就假定应用要使用的是log4j。不过这时log4j本身的属性仍要通过log4j.properties文件正确配置。结束发现过程。
        (4).如果上述查找均不能找到适当的Logging API,但应用程序正运行在JRE 1.4或更高版本上,则默认使用JRE 1.4的日志记录功能。结束发现过程。
        (5).最后,如果上述操作都失败(JRE 版本也低于1.4),则应用将使用内建的SimpleLog。SimpleLog把所有日志信息直接输出到System.err。结束发现过程。

你去看看它的实现类LogFactoryImpl 就有log4j的定义了

收获园豆:10
君子如珩~ | 菜鸟二级 |园豆:325 | 2017-03-15 21:59
其他回答(1)
0

就这一个哥们回答,还是网上复制的,最后还是靠自己沉下心看了一遍代码:

http://www.cnblogs.com/flying607/p/6560851.html

剑握在手 | 园豆:259 (菜鸟二级) | 2017-03-16 19:50

。。。。。我真的是去看源码了。然后再在网上找的。因为我感觉他想的很有道理了,所以就拿给你了,T.T。真的是在LogFactoryImpl 中找到了

支持(0) 反对(0) 君子如珩~ | 园豆:325 (菜鸟二级) | 2017-03-16 21:07

@蜀黎peng: 哈哈,还是很感谢你,再给你点个推荐

支持(0) 反对(0) 剑握在手 | 园豆:259 (菜鸟二级) | 2017-03-16 21:09

@剑握在手: 一起学习。我也得去看看你写的

支持(0) 反对(0) 君子如珩~ | 园豆:325 (菜鸟二级) | 2017-03-16 21:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册