apache commons-logging

作者: 真爱也枉然 | 来源:发表于2017-09-08 09:17 被阅读0次

    commons-logging下载
    commons-logging是Apache下的开源项目。commons-logging.jar的下载地址为:http://commons.apache.org/proper/commons-logging/download_logging.cgicommons-logging
    commons-logging的目的是为“所有的Java日志实现”提供一个统一的接口,使项目与日志实现工具解耦。

    为什么要使用commons-logging+log4j?
    commons-logging和log4j都是Apache下的开源项目。commons-logging的目的是为“所有的Java日志实现”提供一个统一的接口,使项目与日志实现工具解耦,它自身的日志功能比较弱(只有一个简单的 SimpleLog),所以一般不会单独使用它。
    Log4j的功能非常强大,是目前最主流的java日志工具。结合使用两者可以避免使项目与log4j紧密耦合,用户可以轻松切换到其他日志工具,同时又可以使用log4j的强大功能。

    commons-logging如何自动选择适当的日志实现工具?
    我们在使用commons-logging+日志实现工具时,我们的代码只需要和commons-logging打交道,由commons-logging去选择适当的日志实现工具。
    这里我们看一下commons-logging是如何去选择实现工具的:

    • 首先
      在classpath下寻找自己的配置文件commons-logging.properties,如果找到,则使用其中定义的Log实现类:org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog; //使用commons-logging的SimpleLog
      org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger;//选择使用log4j
      org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger; //选择jdk的logger
    • 如果找不到commons-logging.properties文件,则在查找是否已定义系统环境变量org.apache.commons.logging.Log,找到则使用其定义的Log实现类
    • 否则
      查看classpath中是否有Log4j的包,如果发现,则自动使用Log4j作为日志实现类。
    • 否则
      使用JDK自身的日志实现类(JDK1.4以后才有日志实现类)。
    • 否则
      使用commons-logging自己提供的一个简单的日志实现类SimpleLog。
      可见,commons-logging总是能找到一个日志实现类,并且尽可能找到一个最合适的日志实现类。
      为了简化配置,我们可以不使用commons-logging的配置文件,也不设置commons-logging相关的环境变量,只需将log4j的包放入classpath就可以了,这样就可以完成commons-logging与log4j的结合。如果以后不想使用log4j,只需将log4j的包 从classpath中移除就可以了。

    如何在代码中输出日志?

    • 导入所需commons-logging的类
      import org.apache.commons.logging.Log;
      import org.apache.commons.logging.LogFactory;
    • 在自己的类中定义一个org.apache.commons.logging.Log类的私有静态类变量
      private static Log log = LogFactory.getLog(ClassName.class);
    • 使用静态类变量输出日志信息
      为了方便的控制日志输出,把日志分成了不同的级别,从低到高分别是调试,信息,警告,错误,致命错误。这样我们可以通过log4j的配置决定只输出某个级别以上的日志。例如,在开发时我们将debug(调试)及以上的日志全部输出,而在项目正常运行时,设置为只输出warn(警告)及以上的日志。
      //输出各级别的日志信息
    log.debug("debug"); //调试
    log.info("information"); //信息
    log.warn("warning"); //警告
    log.error("error"); //错误
    log.fatal("fatal"); //致命错误
    

    将commons-logging和Log4j的jar包都放置到classpath下,同时也将Log4j的配置文件放到classpath中,两者就可以很好的合作,实现如下:

    package com.doctorcom.model;   
      import org.apache.commons.logging.Log;       
      public class LogFactorySupport {          
          public Log getLog(){   
              Log log = org.apache.commons.logging.LogFactory.getLog(LogFactorySupport.class);   
              log.info("");   
              log.debug("");   
            }       
        } 
    

    Log4j配置内容主要是依据配置文件log4j.properties:

    #指定根Logger,及日志输出级别
    #大于等于该级别的日志将被输出( DEBUG < INFO < WARN < ERROR < FATAL ),设为OFF可以关闭日志   
    log4j.rootLogger=DEBUG, A1,A2   
    #指定log输出目的,这里设为输出日志到指定目录的文件my.log中   
    log4j.appender.A1=org.apache.log4j.FileAppender   
    log4j.appender.A1.File=\\logs\\my.log   #当前根目录下
    #指定日志信息的格式   
    log4j.appender.A1.layout=org.apache.log4j.PatternLayout    
    log4j.appender.A1.layout.ConversionPattern=%r %d{yyyy-MM-dd HH:mm:ss} %c %p -%m%n   
    #把A2输出到控制台   
    log4j.appender.A2=org.apache.log4j.ConsoleAppender   
    log4j.appender.A2.layout=org.apache.log4j.SimpleLayout    
    #还可以单独指定输出某个包的日志级别   
    #log4j.logger.com.study.HelloLog4j=INFO
    

    slf4j
    slf4j全称是:simple logging facade for java,可以理解为简单日记门面。准确的说,slf4j并不是一种具体的日志系统,而是一个用户日志系统的facade,它允许用户在部署最终应用时方便的变更其日志系统。
    slf4j最吸引我的地方是:占位符(place holder)的使用。占位符在代码中表示为“{}”的特性。占位符是一个非常类似于在String的format()方法中的%s,因为它会在运行时被某个提供的实际字符串所替换。这不仅降低了代码中字符串连接次数,而且还节省了新建的String对象。

    下面是在Log4j中使用的方案,但这样做降低了代码可读性因为增加了不必要的繁琐重复代码:

    if (logger.isDebugEnabled()) 
    {
        logger.debug("Processing trade with id: " + id + " symbol: " + symbol);
    }
    

    但是如果你使用slf4j的话,你可以得到在极简洁的格式的结果,就像以下展示的一样:

    logger.debug("Processing trade with id: {} and symbol : {} ", id, symbol);
    

    相关文章

      网友评论

        本文标题:apache commons-logging

        本文链接:https://www.haomeiwen.com/subject/bdfgjxtx.html