Logger的使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaocxks/article/details/52670470

引入包import org.apache.log4j.Logger;

protected static Logger LOG=Logger.getLogger(myclass.class);

若是去掉static,那每个类对象就返回一个Logger类,增加了开销


getLogger("  ")中的字符串写什么都行,只是打印日志的时候会显示出来


protected static Logger LOG=Logger.getLogger(myclass.class);

和protected static Logger LOG=Logger.getLogger(this.getClass());的区别

this表示当前对象的引用

getClass()是java.lang.Object中的方法,他返回一个对象的运行时类

获得一个Logger对象,将这个Logger监视this.getClass这个运行时类

这个运行时类里面你可能创建了log,info()等

那这些语句就会根据你预先定义的Logger级别来输出你的日志

Logger.getLogger(this.getClass())这样写,好处是只需要在基类中写一行代码就可以了

子类可以直接使用,这也是复用的原则

总结:this.getClass()是获取当前正在运行的类


myclass.class和myclass.getClass()的区别

public final native Class<?> getClass();

xx.class是程序运行时就加载到jvm中的

xx.getClass()是程序运行时动态加载的

native表示该方法的实现是通过jvm之外的代码来实现


.class是一个静态常量

.getClass()是一个普通的成员函数

所以,

类名.class

类创建的对象.getClass()

因此,一个是通过类找到class对象,一个是通过类的实例对象找到class对象


myclass.class字段是编译器在编译myclass类时,自动加上去的,这个class是静态的、不可变的

myclass.getClass()是对象级别的,需要由myclass的对象进行调用

编译器自说自话的给类或对象加上额外的字段

除了class之外,还有数组的length也是这样


protected Logger logger=LoggerFactory.getLogger(class<?>)

参数中可以使用两种方法

LoggerFactory.getLogger ( getClass( ) )

这个class中的logger可以被每个子类共用,而不需要每个子类都写一句LoggerFactory.getLogger(someclass.class)

因为getClass是一个可复写的方法,提供了灵活性

所以能用getClass()就用,不能用的时候就class

因为如果子类继承了父类中logger对象是采用getClass()来获取类时

此时返回的是子类的类名


logger.getClass().getName() 通过对象获取类名


Class.forName("包.类名称")也是一种访问class的方法





猜你喜欢

转载自blog.csdn.net/xiaocxks/article/details/52670470