代码片段-不为开始终了log发愁

Tomcat日志记录技巧

开发中 经常要在关键方法开始终了时 记录log日志 特别是方法名经常copy错误有没有

tomcat中提供了一个不错的方法不过StackTraceElement的数组下表要根据自己的需要修改了

当然宝宝之前用Thread.currentThread().getStackTrace()也是可以的 

 tomcat org.apache.juli.logging.DirectJDKLog

    private void log(Level level, String msg, Throwable ex) {
        if (logger.isLoggable(level)) {
            // Hack (?) to get the stack trace.
            Throwable dummyException=new Throwable();
            StackTraceElement locations[]=dummyException.getStackTrace();
            // Caller will be the third element
            String cname = "unknown";
            String method = "unknown";
            if (locations != null && locations.length >2) {
                StackTraceElement caller = locations[2];
                cname = caller.getClassName();
                method = caller.getMethodName();
            }
            if (ex==null) {
                logger.logp(level, cname, method, msg);
            } else {
                logger.logp(level, cname, method, msg, ex);
            }
        }
    }

testcase

package com.tomcatExt.startup;

import java.util.Date;

public class BootStart {

//	public static void main(String[] args) {
//		// TODO Auto-generated method stub
//		HttpConnector connector = new HttpConnector();
//		connector.start();
//	}

	public static void main(String[] args) {
		BootStart test = new BootStart();		
		test.testName1();
		test.testName2();
	}
	
	private void logStart(){
		this.log("Start",null);
	}
	private void logEnd(){
		this.log("End",null);
	}
	
	private void log(String msg,Throwable t){
		Throwable throwable =new Throwable();
		//StackTraceElement[] elements = Thread.currentThread().getStackTrace();//下标3
		
		StackTraceElement[] elements = throwable.getStackTrace();//下标2
		
		String strClassName = "unKnown";
		String strMethodName = "unKnown";
		String strLineNumber = "0";
		
		if(elements.length>1){
			strClassName = elements[2].getClassName();
			strMethodName = elements[2].getMethodName();
			strLineNumber = String.valueOf(elements[2].getLineNumber());
		}
		
		System.out.println(String.format("[Class:%1$s][Method:%2$s][Line:%3$s][Time:%4$s]:%5$s", 
											strClassName,
											strMethodName,
											strLineNumber,
											new Date(),
											msg
											));
		if(t!=null){
			t.printStackTrace();
		}
	}
	
	private void testName1(){
		this.logStart();
		this.logEnd();
	}
	private void testName2(){
		this.logStart();
		this.testName2_1();
		this.logEnd();
	}
	private void testName2_1(){
		this.logStart();
		this.testName2_1_2();
		this.logEnd();
	}
	private void testName2_1_2(){
		this.logStart();
		this.logEnd();
	}

}

运行结果:

[Class:com.tomcatExt.startup.BootStart][Method:testName1][Line:53][Time:Fri Mar 03 18:44:44 CST 2017]:Start
[Class:com.tomcatExt.startup.BootStart][Method:testName1][Line:54][Time:Fri Mar 03 18:44:44 CST 2017]:End
[Class:com.tomcatExt.startup.BootStart][Method:testName2][Line:57][Time:Fri Mar 03 18:44:44 CST 2017]:Start
[Class:com.tomcatExt.startup.BootStart][Method:testName2_1][Line:62][Time:Fri Mar 03 18:44:44 CST 2017]:Start
[Class:com.tomcatExt.startup.BootStart][Method:testName2_1_2][Line:67][Time:Fri Mar 03 18:44:44 CST 2017]:Start
[Class:com.tomcatExt.startup.BootStart][Method:testName2_1_2][Line:68][Time:Fri Mar 03 18:44:44 CST 2017]:End
[Class:com.tomcatExt.startup.BootStart][Method:testName2_1][Line:64][Time:Fri Mar 03 18:44:44 CST 2017]:End
[Class:com.tomcatExt.startup.BootStart][Method:testName2][Line:59][Time:Fri Mar 03 18:44:44 CST 2017]:End

转载于:https://my.oschina.net/dajianguo/blog/850691

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值