1.Commons-Loggin简介
Jakarta Commons Logging (JCL)提供的是一个日志(Log)接口(interface),同时兼顾轻量级和不依赖于具体的日志实现工具。它提供给中间件/日志工具开发者一个简单的日志操作抽象,允许程序开发人员使用不同的具体日志实现工具。用户被假定已熟悉某种日志实现工具的更高级别的细节。JCL提供的接口,对其它一些日志工具,包括Log4J, Avalon LogKit, and JDK 1.4等,进行了简单的包装,此接口更接近于Log4J和LogKit的实现。
2.快速入门
JCL有两个基本的抽象类:Log(基本记录器)和LogFactory(负责创建Log实例)。当commons-logging.jar被加入到 CLASSPATH之后,它会合理地猜测你想用的日志工具,然后进行自我设置,用户根本不需要做任何设置。默认的LogFactory是按照下列的步骤去发现并决定那个日志工具将被使用的(按照顺序,寻找过程会在找到第一个工具时中止):
1.寻找当前factory中名叫org.apache.commons.logging.Log配置属性的值
2.寻找系统中属性中名叫org.apache.commons.logging.Log的值
3.如果应用程序的classpath中有log4j,则使用相关的包装(wrapper)类(Log4JLogger)
4.如果应用程序运行在jdk1.4的系统中,使用相关的包装类(Jdk14Logger)
5.使用简易日志包装类(SimpleLog)
org.apache.commons.logging.Log的具体实现有如下:
-org.apache.commons.logging.impl.Jdk14Logger 使用JDK1.4。
-org.apache.commons.logging.impl.Log4JLogger 使用Log4J。
-org.apache.commons.logging.impl.LogKitLogger 使用 avalon-Logkit。
-org.apache.commons.logging.impl.SimpleLog common-logging自带日志实现类。它实现了Log接口,把日志消息都输出到系统错误流System.err 中。 
-org.apache.commons.logging.impl.NoOpLog common-logging自带日志实现类。它实现了Log接口。 其输出日志的方法中不进行任何操作。
3.使用JCL开发
因为Log4j的强大,同时开发者又不希望对Log4j的依赖性太强。所以目前比较流行的是Commons-logging和Log4j结合使用。
1. 部署日志器
下载commons-logging.jar和log4j.jar包,能后把它们放到工程的lib目录下,引入工程中。
2. 指定日志器
在属性文件common-logging.properties中设置实现接口的类。如下(这里设置Log4j为所使用的日志包):
#commons-logging.properties文件配置信息
# org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog
# Must be one of ("trace", "debug", "info", "warn", "error", or "fatal").
#利用log4j为输出介质
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JCategoryLog
#JDK5 Logger
#org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger
3.org.apache.commons.logging.Log接口中定义的方法,按严重性由高到低的顺序有:
log.fatal(Object message);
log.fatal(Object message, Throwable t);
log.error(Object message);
log.error(Object message, Throwable t);
log.warn(Object message);
log.warn(Object message, Throwable t);
log.info(Object message);
log.info(Object message, Throwable t);
log.debug(Object message);
log.debug(Object message, Throwable t);
log.trace(Object message);
log.trace(Object message, Throwable t);
除此以外,还提供下列方法以便代码保护。
log.isFatalEnabled();
log.isErrorEnabled();
log.isWarnEnabled();
log.isInfoEnabled();
log.isDebugEnabled();
log.isTraceEnabled();
4.信息级别
确保日志信息在内容上和反应问题的严重程度上的恰当,是非常重要的。
1)fatal非常严重的错误,导致系统中止。期望这类信息能立即显示在状态控制台上。
2)error其它运行期错误或不是预期的条件。期望这类信息能立即显示在状态控制台上。
3)warn使用了不赞成使用的API、非常拙劣使用API, '几乎就是'错误, 其它运行时不合需要和不合预期的状态但还没必要称为 "错误"。期望这类信息能立即显示在状态控制台上。
4)info运行时产生的有意义的事件。期望这类信息能立即显示在状态控制台上。
5)debug系统流程中的细节信息。期望这类信息仅被写入log文件中。
6)trace更加细节的信息。期望这类信息仅被写入log文件中。
通常情况下,记录器的级别不应低于info.也就是说,通常情况下debug的信息不应被写入log文件中。
4.Apache Commons-logging使用流程
1)将common-logging.jar 包加入到环境变量或者classpath。
2)导入org.apache.commons.logging.Log;org.apache.commons.logging.LogFactory;及相关包
3)在需要使用logging的地方获取Log实例。
privatestatic Loglog = LogFactory.getLog(Test.class);
4)使用Logger对象的debug,info,fatal...方法。
log.debug("Debug info.");
5.Apache Commons-logging使用示例
Test.java
package sample;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
publicclass Test {
    privatestatic Loglog = LogFactory.getLog(Test.class);
    publicvoid log(){
       log.debug("Debug info.");
       log.info("Info info");
       log.warn("Warn info");
       log.error("Error info");
       log.fatal("Fatal info");
    }
    publicstaticvoid main(String[] args) {
       Test test = new Test();
       test.log();
    }
}
结果:
DEBUG  sample.Test.log(Test.java:13) Debug info.
INFO   sample.Test.log(Test.java:14) Info info
WARN   sample.Test.log(Test.java:15) Warn info
ERROR  sample.Test.log(Test.java:16) Error info
FATAL sample.Test.log(Test.java:17) Fatal info
当没有任何配置文件(.properties)时,就如同上的结果。此时,它使用的是使用简易日志包装类(SimpleLog)。
下面加入包与配置文件,使其使用log4j。
1) 加入配置文件commons-logging.properties和log4j.properties。
2) 将 log4j.jar 和 common-logging.jar 两个包加入到环境变量或者classpath 。
3)Test.java内容不变。
3) commons-logging.properties
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JCategoryLog
4)log4j.properties
log4j.rootLogger=info, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
结果:
INFO [main] - Info info
WARN [main] - Warn info
ERROR [main] - Error info

FATAL [main] - Fatal info

Apache Commons-logging使用实例相关推荐

  1. java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory解决方案

    java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory解决方案 参考文章: (1)java.lang.NoClass ...

  2. Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory

    1.错误叙述性说明 2014-7-12 0:38:57 org.apache.catalina.core.ApplicationContext log 信息: No Spring WebApplica ...

  3. java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory 解决方案

    java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory 解决方案 NoClassDefFoundErrorLogFa ...

  4. SLF4JLogFactory does not implement org.apache.commons.logging.LogFactory

    org.apache.commons.discovery.DiscoveryException: Class org.apache.commons.logging.impl.SLF4JLogFacto ...

  5. VSCrawler 爬虫 java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory 解决方案

    长长的报错信息如下: 13:39:15.345 [main] WARN c.v.vscrawler.core.event.EventLoop - 程序已停止 13:39:15.376 [main] I ...

  6. commons-logging 分析之: org.apache.commons.logging.impl.SimpleLog

    分析info 日志 SimpleLog初始化 SimpleLog静态初始化 SimpleLog 构造初始化 获取属性 SimpleLog 属性总结 日志打印分析 是否启用日志级别 isLevelEna ...

  7. struts2与struts1整合,java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory

    原因:我往项目的WEB-INF/lib中导入了struts2基本的包,还有struts1的core包,以及struts2-strut1-plugin的包,但是没有导入commons-loggin-1. ...

  8. 运行错误:Exception in thread “main“ java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactor

    这是我们在做OSS文件上传时容易发生的错误,提示说没有日志相关的类,是因为没有导入相关的jar包,所以我们只需要导入一个commons-logging就好了 <!-- https://mvnre ...

  9. Duplicate class org.apache.commons.logging.Log found in modules jetified-commons-logging-1.1.3解决方法汇总

    在使用了百度开放接口的一段代码后,出现了如题所示的问题,Android包冲突了,这里有两个解决方式: 1.一般情况下,我们在AndroidStudio中的左侧的工程树中,找到external libr ...

  10. Apache Commons工具集简介

    文章出处 Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.下面是我这几年做开发过程中自己用过的工具类做简单介绍. 组件 功能介绍 BeanUtils ...

最新文章

  1. python遍历文件目录_python目录遍历
  2. php smtp 超时,SMTP错误:无法连接到服务器:连接超时(110)与PHPMailer和Outlook SMTP
  3. Flex Application里的addChild()
  4. 在mysql中更改数据类型_如何在MySQL中更改列的数据类型?
  5. 关于鸿蒙工艺调查分析报告,800万芯片订单已下,5nm工艺+鸿蒙系统,华为做了双重准备...
  6. 回溯法解决工作分配问题及分析
  7. 【Pytorch神经网络理论篇】 32 PNASNet模型:深层可分离卷积+组卷积+空洞卷积
  8. 云漫圈 | 女生适合做程序员吗?
  9. Arduino笔记-WeMos D1开发环境搭建及亮灯
  10. JAVA学习笔记001---认识了解NIO
  11. 自动驾驶—全局定位的学习笔记
  12. 2021新乡市铁一中高考成绩查询,2021铁一中中考录取分数线预测
  13. 麻瓜编程python百度云_麻瓜编程 实用主义学Python
  14. C# HttpClientHelper
  15. java医疗保险系统_医疗保险管理系统设计 Java
  16. 网络安全知识竞赛题库及答案(多选题1-100题)
  17. 滑块逃脱_逃脱测试的丛林:从夹具到断言的捷径
  18. android6.0新权限申请以及RxPermissions库的使用
  19. 电话都免费了 移动IM这么牛X 运营商知道么?
  20. MySQL将多条数据合并成一条

热门文章

  1. 【Android 内存优化】Bitmap 长图加载 ( BitmapRegionDecoder 简介 | BitmapRegionDecoder 使用流程 | 区域解码加载示例 )
  2. Linux入门:部署JavaWeb项目
  3. [BZOJ1188/Luogu3185][HNOI2007]分裂游戏
  4. 剑指offer解题思路锦集11-20题
  5. .NET泛型解析(上)
  6. ymcms SQL注入漏洞
  7. 操作系统老师上课讲的那个根据I/O时间和CPU时间比例来为进程分配优先级的题目,I/O时间比例越大,则这个进程的优先级越高
  8. Apache Beam和BigQuery的错误处理(Java SDK)
  9. NOIP 2017 d2t2 70points
  10. IDEA Project Structure 配置说明