JCL(Commons Logging)的介绍和Log4j日志框架的配合使用

    JCL(Commons Logging)的介绍 

        JCL,全称为"Jakarta Commons Logging",也可称为"Apache Commons Logging"。       

        Commons Logging 的 目的是为 "所有的Java日志实现"提供一个统一的接口,它自身也提供一个日志的实现,但是功能非常常弱(SimpleLog)。所以一般不会单独使用它. 他允许开发人员使用不同的具体日志实现工具: Log4j, Jdk自带的日志(JUL) ,logback等(如果要用logback 的实现,需要jcl-over-slf4j-[version].jar 包) 开发人员可以不需要改动代码进行日志实现的切换。

        JCL 有两个基本的抽象类:Log(基本记录器)和LogFactory(负责创建Log实例)。当commons-logging.jar被加入到classpath之后,它会心可能合理地猜测你喜欢的日志工具,然后进行自我设置,用户根本不需要做任何设置。默认的LogFactory是按照下列的步骤去发现并决定那个日志工具将被使用的(按照顺序,寻找过程如果条件符合将终止并返回) :

/**
 * Convenience method to return a named logger.
 * @param name logical name of the <code>Log</code> instance to be returned
 */
public static Log getLog(String name) {
		switch (logApi) {
			case LOG4J:
				return Log4jDelegate.createLog(name);
			case SLF4J_LAL:
				return Slf4jDelegate.createLocationAwareLog(name);
			case SLF4J:
				return Slf4jDelegate.createLog(name);
			default:
				// Defensively use lazy-initializing delegate class here as well since the
				// java.logging module is not present by default on JDK 9. We are requiring
				// its presence if neither Log4j nor SLF4J is available; however, in the
				// case of Log4j or SLF4J, we are trying to prevent early initialization
				// of the JavaUtilLog adapter - e.g. by a JVM in debug mode - when eagerly
				// trying to parse the bytecode for all the cases of this switch clause.
				return JavaUtilDelegate.createLog(name);
		}
}

            默认的LogFactory实现使用以下发现过程来确定应使用的Log实现类型(在找到第一个肯定匹配项时(按顺序),该过程终止):

  1. 查找该工厂的名为org.apache.commons.logging.Log的配置属性 .

    可以通过Java代码显式设置配置属性,但是更常见的是通过在类路径中放置一个名为commons-logging.properties的文件来进行设置。当存在这样的文件时,属性文件中的每个条目都将成为LogFactory的“属性”。如果类路径中有多个此类文件,则1.1之前的commons-logging版本仅使用找到的第一个文件。从版本1.1开始,每个文件都可以定义优先级密钥,并且使用优先级最高的文件(没有优先级定义表示优先级为零)。当多个文件具有相同的优先级时,将使用找到的第一个文件。建议在commons-logging.properties文件中定义此属性,以明确选择Log实现。

  2. 查找名为org.apache.commons.logging.Log的系统属性 
  3. 如果Log4J日志记录系统在应用程序类路径中可用,请使用相应的包装器类(Log4JLogger)。
  4. 如果应用程序在JDK 1.4系统上执行,请使用相应的包装器类(Jdk14Logger)。
  5. 退回到默认的简单日志记录包装器(SimpleLog)。

     详细请参见 http://commons.apache.org/logging/guide.html#Configuration

jcl和其他日志框架的配合使用

 JCL 和 Log4j 结合使用(jcl是默认支持log4j日志框架的

  1.  引入jar包
    <!-- https://mvnrepository.com/artifact/log4j/log4j -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
    
  2. 添加log4j.properties属性文件(属性文件需要添加自己的日志配置)

     log4j.properties文件放入classpath下就行, 系统会自动搜素log4j 的实现, 并使用它。
     也可通过手工配置,创建commons-logging.properties 文件. 放在classpath 下. 在其中加入以下配置:   org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger

  3. 代码使用
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    
    public class JclLog {
    
          //获取日志对象
          private static Log log = LogFactory.getLog(getClass());
    
          public void logPrint(){
               //日志打印
               log.info("I am  log");
          }
    }

     

log4j移除spring,hibernate等自身的日志打印

在log4j.properties添加代码

log4j.logger.包名=日志级别

如下例子:

log4j.logger.org.springframework=off   //关闭spring的日志打印
log4j.logger.org.hibernate=ERROR       //hibernate的日志打印级别调整为ERROR

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值