Commons Logingg

现在java世界中,流行了两个日志门面:SLF4j、Commons Logging。真正使用到的日志框架则会有:JDK Log、Log4j、Simple Log、Logback等。之前已经对SLF4j作了个简单的介绍,这里也对Commons-Logging做一个简单的介绍。Commons Logging,也就是原来 的jakarta commons logging ,jakarta项目已加入到apache 基金会了,所以Commons Logging是众所周知。如果有地方使用JCL,也应该知道 说的就是commons logging。

1、使用说明 :

从API上看,与SLF4j使用还是类似的:

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory; 

public class CLASS
{
    private Log log = LogFactory.getLog(CLASS.class);
    ...
    ;

2、日志级别说明:

  • fatal - Severe errors that cause premature termination. Expect these to be immediately visible on a status console. See also Internationalization.
  • error - Other runtime errors or unexpected conditions. Expect these to be immediately visible on a status console. See also Internationalization.
  • warn - Use of deprecated APIs, poor use of API, ‘almost‘ errors, other runtime situations that are undesirable or unexpected, but not necessarily "wrong". Expect these to be immediately visible on a status console. See also Internationalization.
  • info - Interesting runtime events (startup/shutdown). Expect these to be immediately visible on a console, so be conservative and keep to a minimum. See also Internationalization.
  • debug - detailed information on the flow through the system. Expect these to be written to logs only.
  • trace - more detailed information. Expect these to be written to logs only.

3、日志框架查找过程

Commons-Logging中提供了两个API:Log、LogFactory。 Log就是基本的Logger,LogFactory则是创建Log实例的Factory。commons-logging是一个日志facade,它运行时会先找到实际的Log实现,而在找Log实现之前,则要先找到LogFactory的实现。

上面的代码中:LogFactory.getLog(CLASS.class);的执行过程是:

public static Log getLog(Class clazz) throws LogConfigurationException {
        return getFactory().getInstance(clazz);
}

  也就是会先使用static方法getFactory()找到LogFactory的实现,然后根据LogFactory实例找到Log实现。

getFactory()查找自定义LogFactory的过程:

1)从系统属性中找到由org.apache.commons.logging.LogFactory定义的LogFactory。如果未找到,则进入2)。

2)根据JDK中的Service自动发现机制找到META-INF/services/org.apache.commons.logging.LogFactory配置的LogFactory。如果未找到则进入3)。

3)从classpath下的commons-logging.properties文件中找到org.apache.commons.logging.LogFactory定义的LogFactory。如果未找到则进入4)。

4)进到此处说明前3步都未找到一个合适的LogFactory实现。那些就使用commons-logging提供的内置实现:org.apache.commons.logging.impl.LogFactoryImpl。

如果是在前3步找到了LogFactory,则由自定义的LogFactory来获取Log对象。如果是由内置的LogFactory,它在获取Log实例时,遵循下面次序:

1)在classpath下找到commons-logging.properties。如果未找到该文件,则进入2)。如果找到该文件,则会找一个名为org.apache.commons.logging.Log (老版本的可能是org.apache.commons.logging.log)的属性。如果未找到该属性,则进行2)。

2)找系统属性中名为org.apache.commons.logging.Log (老版本的可能是org.apache.commons.logging.log)的属性。仍未找到,则进入3)。

3)如果在classpath下找到了log4j的相关配置,则自动使用log4j的包装类 Log4jLogger。否则进入4)。

4)如果是运行在JDK 1.4及之上版本,则自动关联JDK 1.4的包装类Jdk14Logger。否则进入5)。

5)使用Jdk13Logger。如果出错进入6)。

6)使用默认的simple logger包装:SimpleLogger。

4、在Web环境中,如果使用了Commons-Logging ,在解部署、重部署war时,会引发内存泄漏,该如何解决?

class ContextManager implements javax.servlet.ServletContextListener {
  public void contextDestroyed(ServletContextEvent sce) {
    ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
    LogFactory.release(contextClassLoader);

    // Optionally, clean up the underlying concrete logging library too. This might
    // require direct calls to methods on library-specific methods. 

    // And optionally call java.beans.Introspector.flushCaches if your app does any
    // bean introspection and your container doesn‘t flush the caches for you on
    // servlet undeploy. Note that this isn‘t a commons-logging problem; it‘s something
    // quite unrelated which can also cause memory leaks on undeploy.
  }
}
时间: 2024-10-23 08:37:28

Commons Logingg的相关文章

Apache Commons FileUpload

1    概述 Commons FileUpdate包很容易为你的Servlet和web应用程序添加健壮的.高性能的文件上传功能.FileUpload解析遵循RFC 1876(在HTML中基于表单的文件上传)HTTP请求.即,如果一个HTTP请求使用POST方法提交,并且使用"multipart/form-data"的内容类型,然后FileUpload解析请求,使结果易于调用者使用.从1.3开始,FileUpload处理RFC 2047编码头值. 2    用户指南 2.1    使用

Apache Commons Configuration之一简介

1    简介 Commons Configuration软件类库提供通用配置接口,使Java应用程序从多种源读取配置文件.Commons Configuration提供简单类型访问和通过以下代码演示的多义配置参数: Double double = config.getDouble("number"); Integer integer = config.getInteger("number"); 配置参数可以从以下源加载: Properties文件 XML文档 Pr

Java多层目录打包和解压代码(apache commons compress, io, lang)

Java多层目录打包和解压代码(apache commons compress, io, lang) package zip;   import java.io.BufferedOutputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.Fil

Commons Codec基本使用(转载)

在实际的应用中,我们经常需要对字符串进行编解码,Apache Commons家族中的Commons Codec就提供了一些公共的编解码实现,比如Base64, Hex, MD5,Phonetic and URLs等等. 一.官方网址: http://commons.apache.org/codec/ 二.例子 1.  Base64编解码 private static String encodeTest(String str){ Base64 base64 = new Base64(); try 

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory

MyEclipse运行的时候报错,菜鸟不理解是什么意思,最后找了一些资料才知道是因为缺少commons-logging.jar包 Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory at org.apache.commons.httpclient.HttpClient.<clinit>(HttpClient.java:66) at c

The import org.apache.commons.fileupload cannot be resolved

1.右键项目--Build Path--Add External Archives 2.选中需要引入的jar包(注意哦,不是zip文件) 3.确认添加外部文档 4.web App Libraries显示加载成功,即可引入 org.apache.commons.fileUpload文件

Apache Commons 工具类介绍及简单使用

Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍.   组件 功能介绍 BeanUtils 提供了对于JavaBean进行各种操作,克隆对象,属性等等. Betwixt XML与Java对象之间相互转换. Codec 处理常用的编码方法的工具类包 例如DES.SHA1.MD5.Base64等. Collections java集合框架操作. Compress java提供文件打包 压缩类库. C

Apache Commons 工具集

一.Commons BeanUtils http://jakarta.apache.org/commons/beanutils/index.html 说明:针对Bean的一个工具集.由于Bean往往是有一堆get和set组成,所以BeanUtils也是在此基础上进行一些包装. 使用示例:功能有很多,网站上有详细介绍.一个比较常用的功能是Bean Copy,也就是copy bean的属性.如果做分层架构开发的话就会用到,比如从PO(Persistent Object)拷贝数据到VO(Value O

CVE-2014-0050: Exploit with Boundaries, Loops without Boundaries、Apache Commons FileUpload and Apache Tomcat DoS

catalog 1. Description 2. Analysis 3. POC 4. Solution 1. Description MultipartStream.java in Apache Commons FileUpload before 1.3.1, as used in Apache Tomcat, JBoss Web, and other products, allows remote attackers to cause a denial of service (infini