Java学习笔记之log4j与commons-logging<转>

(2011-02-16 11:10:46)

转载▼

标签:

杂谈

分类: 技术学习之其他
Logger来自log4j自己的包。如果用Logger.getLogger,需要一个log4j的jar包,用此方式你只能依靠log4j: 
而LogFactory来自common-logging包。如果用LogFactory.getLog,你可以用任何实现了通用日志接口的日志记录器替换log4j,而程序不受影响。apache的common-logging包是通用日志接口,通过这个中间层,你可以随便指定到底用哪个日志系统。增加系统的灵活性。若log4j它不存在, commons-logging 会另行选择其它的日志实现类。 这样保证了程序中不一定要使用log4j这个日志文件了

为了简化配置 commons-logging ,一般不使用commons-logging 的配置文件,也不设置与 commons-logging 相关的系统环境变量,而只需将 Log4j 的 Jar 包放置到 classpash 中就可以了。这样就很简单地完成了 commons-logging 与 Log4j 的融合。 如果不想用Log4j了怎么办?只需将classpath中的Log4j的Jar包删除即可。就这么简单!
基于common-logging的运行方式: 
package org; 
import org.apache.commons.logging.Log; 
import org.apache.log4j.Logger; 
public class Test extends TagSupport{ 
public static Logger log=Logger.getLogger(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 文件

http://laorer.javaeye.com/blog/177584

1、导入所有需的commongs-logging类: 
Java代码 
import  org.apache.commons.logging.Log;    
import  org.apache.commons.logging.LogFactory;   
如果愿意简化的话,还可以两行合为一行: 
Java代码 
 import  org.apache.commons.logging. * ;

2、在自己的类中定义一个org.apache.commons.logging.Log类的私有静态类成员: 
Java代码 
private   static  Log log  =  LogFactory.getLog(YouClassName. class );   
注意这里定义的是static成员,以避免产生多个实例。

LogFactory.getLog()方法的参数使用的是当前类的class,这是目前被普通认为的最好的方式。为什么不写作LogFactory.getLog(this.getClass())?因为static类成员访问不到this指针!

3、使用org.apache.commons.logging.Log类的成员方法输出日志信息: 
Java代码 
 log.debug( " 111 " );    
 log.info( " 222 " );    
 log.warn( " 333 " );    
 log.error( " 444 " );    
 log.fatal( " 555 " );   
这里的log,就是上面第二步中定义的类成员变量,其类型是org.apache.commons.logging.Log,通过该类的成员方法,我们就可以将不同性质的日志信息输出到目的地(目的地是哪里?视配置可定,可能是stdout,也可能是文件,还可能是发送到邮件,甚至发送短信到手机……详见下文对log4j.properties的介绍):

Java代码 
1         debug()   输出“调试”级别的日志信息;    
2         info()      输出“信息”级别的日志信息;    
3         warn()    输出“警告”级别的日志信息;    
4         error()     输出“错误”级别的日志信息;    
5         fatal()      输出“致命错误”级别的日志信息;

根据不同的性质,日志信息通常被分成不同的级别,从低到高依次是: 
“调试(DEBUG)”“信息(INFO)”“警告(WARN)”“错误(ERROR)”“致命错误(FATAL)”。 
为什么要把日志信息分成不同的级别呢?这实际上是方便我们更好的控制它。比如,通过Log4j的配置文件,我们可以设置“输出‘调试’及以上级别的日志信息”(即“调试”“信息”“警告”“错误”“致命错误”),这对项目开发人员可能是有用的;我们还可以设置“输出“警告”及以上级别的日志信息”(即“警告”“错误”“致命错误”),这对项目最终用户可能是有用的。

仅从字面上理解,也可以大致得出结论:最常用的应该是debug()和info();而warn()、error()、 
fatal()仅在相应事件发生后才使用。 
从上面三个步骤可以看出,使用commons-logging的日志接口非常的简单,不需要记忆太多东西:仅仅用到了两个类Log, LogFactory,并且两个类的方法都非常少(后者只用到一个方法,前者经常用到的也只是上面第三步中列出的几个),同时参数又非常简单。

转载于:https://www.cnblogs.com/Lxiaojiang/p/6528986.html

Java学习笔记之log4j与commons-logging转相关推荐

  1. java common log使用,log4j和commons.logging日志记录的使用方法

    # re: log4j和commons.logging日志记录的使用方法 2008-03-11 14:08 芦苇 一 最好与commons-logging一起用,why? 1.标准接口,即使将来脱离了 ...

  2. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  3. Java 学习笔记 - 数组类型互转

    Java 学习笔记 - 数组类型互转 数组类型转换 字符串数组 to (Integer.Long.Double)列表 传统方式 Java8 Stream方式 数组 to 数组 字符串数组 to (in ...

  4. java学习笔记11--Annotation

    java学习笔记11--Annotation Annotation:在JDK1.5之后增加的一个新特性,这种特性被称为元数据特性,在JDK1.5之后称为注释,即:使用注释的方式加入一些程序的信息. j ...

  5. java学习笔记13--反射机制与动态代理

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note13.html,转载请注明源地址. Java的反射机制 在Java运行时环境中,对于任意 ...

  6. 准备写java学习笔记

    准备写java学习笔记 java int 转载于:https://blog.51cto.com/cryingcloud/1975267

  7. Java学习笔记--StringTokenizer的使用

    2019独角兽企业重金招聘Python工程师标准>>> Java Tips: 使用Pattern.split替代String.split String.split方法很常用,用于切割 ...

  8. java学习笔记12--异常处理

    java学习笔记系列: java学习笔记11--集合总结 java学习笔记10--泛型总结 java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 j ...

  9. Java学习笔记(十)--控制台输入输出

    输入输出 一.控制台输入 在程序运行中要获取用户的输入数据来控制程序,我们要使用到 java.util 包中的 Scanner 类.当然 Java 中还可以使用其他的输入方式,但这里主要讲解 Scan ...

最新文章

  1. go程序执行流程分析
  2. Anthem库的Google Suggest 实现
  3. 用户user空间和内核kernel空间
  4. 近期工作中使用到的插件总结
  5. Python3实现汉诺塔问题
  6. 适合建索引?不适合建索引?分析
  7. Google Guice依赖注入框架使用
  8. 神经网络训练结果都是1,神经网络训练效果不好
  9. 微信公众号 自定义菜单跳转html页面 前端获取code,openid
  10. Android Studio 自带 模拟器无声音 解决方法
  11. 360wifi使用方法|360wifi使用教程
  12. word可以画神经网络图吗,如何画神经网络结构图
  13. docker提交比赛记录
  14. fiddler——抓苹果手机的包
  15. oracle rfs进程过多,oracle 11g data guard 中RFS、MRP进程的说明
  16. 苹果手机用android,用习惯了苹果手机还能从苹果换到安卓吗?
  17. troubleshooting之解决YARN队列资源不足导致的application直接失败
  18. 决策树可视化:鸢尾花数据集分类(附代码数据集)
  19. 十四个很准的心理暗示
  20. 报表开发工具FastReport.NET的十大常见问题及解决方法

热门文章

  1. Java成神之路——volatile是什么?
  2. 成都五月花计算机网教,【强调】成都五月花计算机学校网址是什么
  3. matlab极坐标下的二维傅里叶变换_形象理解二维傅里叶变换
  4. 易语言客户端请求http_易语言建立HTTP连接请求源码
  5. emqx http not found 怎么回事_幽默笑话:行倒是行,但两个大男人这么说话算怎么回事...
  6. 【java】Thread.Sleep(0) 与 Thread.onSpinWait
  7. 【elasticsearch】 Elasticsearch集群规模和容量规划的底层逻辑
  8. 【Elasticsearch】Elasticsearch 搜索体验可量化的指标 查准率(精确率)、查全率(召回率)
  9. 【Elasticsearch】elasticsearch 索引 详解 index
  10. 95-230-022-源码-WordCount走读-获取JobGraph