废话Log4j
? ? ? 使用Log4j去管理日志多年了,基本每次都是按照前面项目中用过的代码Copy过来,也基本了解所有配置信息的意义。不过一直不明白为啥总要?Logger.getLogger(ClassName.class)去获取一个Logger, 主要是不明白为啥总要传个Class进去;因为随便传个什么字符串的结果貌似没有任何区别,但为何所有的例子都要搞个Class传进去?难道有什么深意不成?
?
? ? ? 今天闲暇决定搞清楚这个问题,答案是不需要也无任何深意;就是Log4j支持多个Logger,每个Logger可以单独配置;而我们一般都直接配置log4j.rootLogger。就是配置了所有的Logger都使用同样的配置,故得到个啥Logger都可以做同样的事。这样看来,即便我们之需要一个Logger,就是只要配置rootLogger就可以,而我们总是“Logger.getLogger(ClassName.class)去获取一个Logger”,貌似会产生很多个Logger对象,而这些Logger总做同样的事,资源有些浪费。当然,以上担忧只是臆断,没有研究Log4j的源代码或相关文档。
?
? ? ? 直到现在我才能说真的懂了Log4j,尽管熟练使用很多年。不要放过任何一个疑问,或许里面隐藏着一个天大的秘密。
1 楼 ma 2011-07-26 楼主果然废话啊,呵呵 2 楼 shaier 2011-11-17 楼主说的好像有不准确的地方,多个记录器的情况还是很多的,而且这样写好像不会产生多个logger的! 3 楼 Mybeautiful 2011-11-18 shaier 写道楼主说的好像有不准确的地方,多个记录器的情况还是很多的,而且这样写好像不会产生多个logger的!恩,确实如此..每个名字的logger只有一个,如果没有对应的,就直接返回rootLogger..