Logger

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.  
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对象所用。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值