java slf4j 例子_在继承时声明slf4j实例的一个注意点

引言

java中的log组件有,log4j, commons-logging, slf4j等, 在声明的时候, 常见getClass()或者类名.class来作为名称, 这两种方法各有特点,总体来说getClass()方便一些, 不过本人今天在继承中遇到了点微妙的差异, 在这里给大家分享下.

代码

log4j代码:

log4j.rootLogger=info,CONSOLE

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender

log4j.appender.CONSOLE.Target=System.out

log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout

log4j.appender.CONSOLE.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n

父类代码:

public class CreatorBase{

//方案一

// final private Logger logger = LoggerFactory.getLogger(getClass());

//方案二

// final private Logger logger = LoggerFactory.getLogger(CreatorBase.class);

@Before

public void setUp() throws Exception {

//配置log4j

logger.info("CreatorBase");

}

}

子类代码:

public class WorkerCreator extends CreatorBase{

final private Logger logger = LoggerFactory.getLogger(getClass());

@Test

public void testCreateDB(){

logger.info("Creating tables...");

}

}

执行子类后的结果

本例采用log4j作为slf4j的实现类

方案一:

[WorkerCreator]-[INFO] CreatorBase

[WorkerCreator]-[INFO] Creating tables...

方案二:

[CreatorBase]-[INFO] CreatorBase

[WorkerCreator]-[INFO] Creating tables...

###问题总结### 在方案一中, 使用了getClass(), 被继承后, 在父类中却打印了子类的类名. 而方案二中使用类名.class,可以正确显示类名. 在本案例中是这个情况.

getClass()的好处是在ctrl+c, ctrl+v的时候很方便,不用改代码.

在方案二中的类名.class的方式, 每次ctrl+c, ctrl+v都需要修改类名.class, 容易遗忘搞错, 不过好处是在被继承的时候,防止出错.

结合实际情况, 来选择适合的写法.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值