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对象的引用了,见下列代码:
- package com.zhaipuhong.j2se.keywords;
- public class ThisKeywordsA {
- protected String className = this.getClass().toString();
- public ThisKeywordsA(){
- System.out.println("ThisKeywordsA className == " + className);
- }
- }
- package com.zhaipuhong.j2se.keywords;
- public class ThisKeywordsBextends ThisKeywordsA{
- public ThisKeywordsB(){
- System.out.println("ThisKeywordsB className == " + className);
- }
- /**
- * @param args
- */
- public staticvoid main(String[] args) {
- // TODO Auto-generated method stub
- ThisKeywordsB b = new ThisKeywordsB();
- }
- }
package com.zhaipuhong.j2se.keywords;
public class ThisKeywordsA {
protected String className = this.getClass().toString();
public ThisKeywordsA(){
System.out.println("ThisKeywordsA className == " + className);
}
}
package com.zhaipuhong.j2se.keywords;
public class ThisKeywordsB extends ThisKeywordsA{
public ThisKeywordsB(){
System.out.println("ThisKeywordsB className == " + className);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ThisKeywordsB b = new ThisKeywordsB();
}
}
运行结果:
ThisKeywordsA className == class com.zhaipuhong.j2se.keywords.ThisKeywordsB
ThisKeywordsB className == class com.zhaipuhong.j2se.keywords.ThisKeywordsB
由于B继承A,A对象首先被创建(请不要考虑抽象类和接口^_^)然后作为B对象的字对象创建B 对象. 此时的Logger就是B对象的一部分,可以为B对象所用。