博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
代码片段-不为开始终了log发愁
阅读量:7110 次
发布时间:2019-06-28

本文共 3448 字,大约阅读时间需要 11 分钟。

hot3.png

开发中 经常要在关键方法开始终了时 记录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

你可能感兴趣的文章
Linux自动执行sh脚本
查看>>
转:消息队列
查看>>
Ansible
查看>>
软件测试Lab2 Selenium及自动化测试
查看>>
ubuntu配置lamp运行环境笔记
查看>>
Redis 数据库结构设计
查看>>
2016过狗菜刀下载 2016过狗刀 过狗菜刀下载
查看>>
day8--socket文件传输
查看>>
P/Invoke Interop 实例
查看>>
百分比宽度div如何水平居中
查看>>
最后一位
查看>>
Vue学习笔记(1)——在页面右上角实现可悬浮/隐藏的系统菜单
查看>>
Java Thread 的使用
查看>>
[Noip2016]换教室(期望+DP)
查看>>
【译】使用 React,TypeScript 和 Webpack 开始一个项目
查看>>
3555: [Ctsc2014]企鹅QQ
查看>>
Mysql分库分表方案之spider存储引擎(一)
查看>>
【BZOJ】2502 清理雪道
查看>>
NSProxy的简单使用
查看>>
【CodeForces】704 C. Black Widow 动态规划+模拟
查看>>