由声明logger谈起

最近看一些old fasion的代码,发现仅仅一个logger的声明,就很有意思。

以SLF为例,

首先是推荐的写法:

private final static Logger logger = LoggerFactory.getLogger(MyClass.class);

然后按词解读:

private :保持私有,不给外部类机会;
final   :保持不变,不给修改的机会;
static  :保持静态,节省开销;

至于 

LoggerFactory.getLogger(MyClass.class);

我们能看到某些使用getClass() 替代的方法。

这里有些利弊:

getClass(): 不能使用static修饰,Java初始化顺序导致;


MyClass.class : 不能动态显示子类归属的log;


Ref: 1   2  3  4


——————————————分割线——————————————

刚才跟同事讨论了一下,好像关于是否static有很大争议 ,各有各的好处。

然后,对于某些共享类,特别是没有自己log的module,怎么加log也很有意思。

看过之前的某个遗留代码,为了拿className费尽周折啊,不过这种有并发问题,权作拓展思路吧

    public static void info(String msg) {
    	if(useLog4j)
    	{
    		instance.log4jLogger=org.apache.log4j.Logger.getLogger(getClassName());
    		instance.log4jLogger.info(getMethodName() +" : "+msg);
    	}
    	else
    	{
        	instance.logger.logp(Level.INFO, getClassName(), getMethodName(), msg);
    	}
    }
     private static String getClassName() {
        Throwable t = CusLogger.e.fillInStackTrace();
        StackTraceElement elements[] = t.getStackTrace();
        StackTraceElement element = elements[2];
        return element.getClassName();
    }




















转载于:https://my.oschina.net/u/921876/blog/423706

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值