使用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,尽管熟练使用很多年。不要放过任何一个疑问,或许里面隐藏着一个天大的秘密。