当创建日志对象的时候,大家都习惯用private static final修饰:
private static final Logger logger= LoggerFactory.getLogger(xxxx.class);
为啥呢?说一下自己的理解:
getLogger()
方法的参数应是当前类的字节码对象,在打印日志信息时,才会显示日志信息是由当前类打印
- 1.private 当前日志对象logger只能在本类中使用,防止被其他类调用。
- 2.static 将日志对象定义成静态,在类被加载时,该日志对象就被创建,且内存中唯一,避免了重复创建带来内存浪费。
举例:
//在A类中创建非静态日志对象,非静态成员变量归属于对象
public class A{
private final Logger logger= LoggerFactory.getLogger(A.class);
}
//在B类和C类创建两个不同的A对象时,内存中也会创建两次logger对象
//如果logger对象是静态的,则只会在A类加载时创建一次
public class B{
A a = new A();
}
public class C{
A a = new A();
}
- 3.final 被final修饰的常量,不允许被重新赋值,如果重新赋值且字节码对象被篡改,则显示的日志信息与类信息不匹配。