Logger.getLogger()与LogFactory.getLog()的区别详解

2022-10-20,,

logger来自log4j自己的包。如果用logger.getlogger,需要一个log4j的jar包,用此方式你只能依log4j:

logfactory来自common-logging包。如果用logfactory.getlog,你可以用任何实现了通用日志接口的日志记录器替换log4j,而程序不受影响。apache的common-logging包是通用日志接口,通过这个中间层,你可以随便指定到底用哪个日志系统。增加系统的灵活性。若log4j它不存在, commons-logging 会另行选择其它的日志实现类。 这样保证了程序中不一定要使用log4j这个日志文件了

增强灵活性的理由:
1)
首先在 classpath 下寻找自己的配置文件 commons-logging.properties ,如果找到,则使用其中定义的 log 实现类;

2)如果找不到 commons-logging.properties 文件,则在查找是否已定义系统环境变量 org.apache.commons.logging.log ,找到则使用其定义的 log 实现类;

3)否则,查看 classpath 中是否有 log4j 的包,如果发现,则自动使用 log4j 作为日志实现类;

4)否则,使用 jdk 自身的日志实现类( jdk1.4 以后才有日志实现类);

5)否则,使用 commons-logging 自己提供的一个简单的日志实现类 simplelog ;

为了简化配置 commons-logging ,一般不使用 commons-logging 的配置文件,也不设置与 commons-logging 相关的系统环境变量,而只需将 log4j 的 jar 包放置到 classpash 中就可以了。这样就很简单地完成了 commons-logging 与 log4j 的融合。

根据不同的性质,日志信息通常被分成不同的级别,从低到高依次是:“调试( debug )”“信息( info )”“警告( warn )”“错误(error )”“致命错误( fatal )”。

基于common-logging的运行方式:
复制代码 代码如下:
package org;
import org.apache.commons.logging.log;
import org.apache.log4j.logger;
public class test extends tagsupport{
public static log log=logfactory.getlog(test.class);
public static void test()
{
log.debug("111");
log.info("125");
log.warn("485");
log.error("error");

}
public static void main(string[] a)
{
test.test();
}
}

基于log4j的运行方式
复制代码 代码如下:
import org.apache.log4j.logger;
import org.apache.log4j.propertyconfigurator;
public class testlog4j {

static logger logger = logger.getlogger(testlog4j.class);
   public static void main(string args[]) {
   propertyconfigurator.configure("log4j.properties");
   logger.debug("here is some debug");
   logger.info("here is some info");
      logger.warn("here is some warn");
      logger.error("here is some error");
      logger.fatal("here is some fatal");
   }
}

commons-logging 仅仅对 log4j( 当然还包括其它 log 实现 ) 作了一层包装,具体的日志输出还是在内部转交给身后的 log4j 来处理,还有log4j会默认的去classes目录下去寻找log4j.properties 文件

《Logger.getLogger()与LogFactory.getLog()的区别详解.doc》

下载本文的Word格式文档,以方便收藏与打印。