Logger

来源:互联网 发布:高分辨率数据 编辑:程序博客网 时间:2024/06/11 11:25

http://www.iteye.com/problems/2408

使用Logger需要创建一个 log4j.properties文件,然后在classpath设置路径

比如如果将log4j.properties放在BA1Automation\config下,然后再classpath需要设置<classpathentry kind="src" path="config"/>

 

this.getClass()得到什么?

this 表示当前对象的引用;
getClass() 是 java.lang.Object 中的方法,它返回一个对象的运行时类;
this.getClass() 就是返回当前对象的运行时类。

Logger.getLogger(this.getClass())又得到什么?
他得到一个Logger对象,这个Logger将监视this.getClass()这个运行时类,这个运行时类里面你可能创建了log.info(""), log.debug(""),……等语句,那么这些语句就会根据你预先定义的Logger级别来输出你的日志。就跟你写System.out.print("")一样,不同的是Logger可以根据需要按级别进行日志输出控制。(当然这只是一方面)


Logger.getLogger(this.getClass())这样写,有什么好处?
这样一来你只需要在基类中写一行代码就可以了,子类可以直接使用,这也是复用的原则。
如果你有一个类A,你可以在A类的开始这么写
Logger log=Logger.getLogger(A.class)
这就定死了这个Logger只监视A类本身如果B类继承A类,你创建B类对象时,上面创建的log对象对B是不起作用的。这就就是hard code.

而Logger.getLogger(this.getClass())就不同,你创建B对象时,this就是B对象的引用了,见下列代码:

Java代码 复制代码 收藏代码
  1. package com.zhaipuhong.j2se.keywords; 
  2.  
  3. public class ThisKeywordsA { 
  4.     protected String className = this.getClass().toString(); 
  5.      
  6.     public ThisKeywordsA(){ 
  7.         System.out.println("ThisKeywordsA className == " + className); 
  8.     } 
  9.  
  10. package com.zhaipuhong.j2se.keywords; 
  11.  
  12. public class ThisKeywordsBextends ThisKeywordsA{ 
  13.      
  14.     public ThisKeywordsB(){ 
  15.         System.out.println("ThisKeywordsB className == " + className); 
  16.     } 
  17.     /**
  18.      * @param args
  19.      */ 
  20.     public staticvoid main(String[] args) { 
  21.         // TODO Auto-generated method stub 
  22.         ThisKeywordsB b = new ThisKeywordsB(); 
  23.     } 
  24.  


运行结果:
ThisKeywordsA className == class com.zhaipuhong.j2se.keywords.ThisKeywordsB
ThisKeywordsB className == class com.zhaipuhong.j2se.keywords.ThisKeywordsB

由于B继承A,A对象首先被创建(请不要考虑抽象类和接口^_^)然后作为B对象的字对象创建B 对象. 此时的Logger就是B对象的一部分,可以为B对象所用。

 

原创粉丝点击