log4j 关于rootLogger以及一些问题





今天遇到的一些问题。

package com.lj.basic.util;

import org.apache.log4j.Logger;


/**
 * 这里把log4j.properties放到了basic-common中,此时如果调用basic-common的maven项目中没有log4j.properties文件<br/>
 * 那么就会调用这里的log4j.properties来读取信息<br/>
 * 但是如果maven项目中建立了log4j.properties,那么程序就不会再读取这里的property文件了。
 * @author Administrator
 *
 */
public final class MyLog4jLogger
{
	private static Logger logger=Logger.getLogger(MyLog4jLogger.class);
	
	private MyLog4jLogger(){}
	
	public  static void debug(Object obj){
		logger.debug( obj);
		 
		
	}
	
	
	public static void info(Object obj){
		logger.info(obj);
	}
	
	public static void warn(Object obj){
		logger.warn(obj);
	}
}


1. 这个类是想拿来随处使用的, 不必在每个类中都new一个Logger对象。
但是似乎问题很多。 比如这样一来就没法显示调用logger方法的类了。(会一律被显示为这个MyLog4jLogger。)

2. 自定义包的问题。
如上图所示,

#log4j.logger.com.lj.cms.web=debug,cms
#log4j.logger.com.lj.core.dao=debug,cms
log4j.logger.com.lj=debug,cms


只有第三行是有效的,原因其实很简单。
因为Mylog4jLogger.java的位置在com.lj.basic.util里面。
log4j并不会管我在哪里调用的MyLog4jLogger的方法, 它只管这个类的位置在哪里。

因此上面改为:
log.4j.logger.com.lj.basic.util, 就可以了。


3. rootLogger的问题

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.rootLogger=warn, stdout


这个rootLogger似乎要屏蔽掉才行。
不然会导致我上面所有的debug信息输出两遍。

这里让我很不解。
难道我自定义了包路径以及级别, 不应该覆盖掉rootLogger的输出才对么?

猜你喜欢

转载自alleni123.iteye.com/blog/1990791
今日推荐