Log4j-----how to use in commons-logging-1.0.4.jar 
Logger - 日志写出器,供程序员输出日志信息 
Appender - 日志目的地,把格式化好的日志信息输出到指定的地方去 
ConsoleAppender - 目的地为控制台的Appender 
FileAppender - 目的地为文件的Appender 
RollingFileAppender - 目的地为大小受限的文件的Appender 
Layout - 日志格式化器,用来把程序员的logging request格式化成字符串 
PatternLayout - 用指定的pattern格式化logging request的Layout 
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### direct messages to file hibernate.log ###
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=hibernate.log
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=warn, stdout    #所有配置继承此配置(在此基础增加),可不要
#可定义自己的级别:
log4j.logger.test=info
#log4j.logger必需;其后可加package name or class name;
使用:
package test;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
 * @author herald
 * 
 * TODO 要更改此生成的类型注释的模板,请转至 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */
public class Test {
 public static void main(String[] args) {
  Log log = LogFactory.getLog("test");         其如果存在"test",不重新建立log  
  log.info("aa");
  log.error("bbbbbb");
 }
}
源码:
CategoryKey key = new CategoryKey(name);
  // Synchronize to prevent write conflicts. Read conflicts (in
  // getChainedLevel method) are possible only if variable
  // assignments are non-atomic.
  Logger logger;
  synchronized (ht) {
   Object o = ht.get(key);
   if (o == null) {
    logger = factory.makeNewLoggerInstance(name);
    logger.setHierarchy(this);
    ht.put(key, logger);
    updateParents(logger);
    return logger;
   } else if (o instanceof Logger) {
    return (Logger) o;
   } else if (o instanceof ProvisionNode) {
    //System.out.println("("+name+") ht.get(this) returned
    // ProvisionNode");
    logger = factory.makeNewLoggerInstance(name);
    logger.setHierarchy(this);
    ht.put(key, logger);
    updateChildren((ProvisionNode) o, logger);
    updateParents(logger);
    return logger;
   } else {
    // It should be impossible to arrive here
    return null; // but let's keep the compiler happy.
   }
  }
 }
	posted on 2005-08-11 22:30 
R.Zeus 阅读(1026) 
评论(0)  编辑  收藏  所属分类: 
Log4j