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

684

被折叠的 条评论
为什么被折叠?



