为了查看Spring中注册RMI的问题,继承了org.springframework.remoting.rmi.RmiRegistryFactoryBean
,同时想把这个类的log级别调成DEBUG.
修改后的配置如下
bean的配置:
<bean id="registry" class="xxx.MyRmiRegistryFactoryBean"> <property name="port" value="12345"/> </bean>
log4j的配置:
log4j.logger.org.springframework.remoting.rmi.RmiRegistryFactoryBean=debug
应该说没啥特别的,可是没有任何输出.
确定配置的写法没有问题后,只能在common-logging的LogFactory.getLog方法被调用时打印出类名.
结果打印了xxx.MyRmiRegistryFactoryBean.
此时再回过头去看RmiRegistryFactoryBean里的logger定义,坑爹啊,居然是个实例变量:
protected final Log logger = LogFactory.getLog(getClass());
平时定义logger的时候一般都是习惯定义成static的,已经形成了思维定势...之前看了好久RmiRegistryFactoryBean的代码,居然都没发现这里logger是实例变量.
因为现在实例的是MyRmiRegistryFactoryBean,getClass()返回的自然就是xxx.MyRmiRegistryFactoryBean
因此只要修改log4j的配置如下就可以了:
log4j.logger.xxx.MyRmiRegistryFactoryBean=debug
恩,我一直以为是log4j的问题, 调试了半天log4j的代码,要是一开始就调试spring的代码,应该一下子就发现问题了.