主要是通过实例化一个Throwable类(或其子类)的对象 ,通过这个对象获取方法调用的堆栈信息来实现的。下面是一段简单的示例代码:
public class Debug {
private static String buildLogMessage(String message){
StackTraceElement trace = null;
StackTraceElement traces[] = (new Throwable()).getStackTrace();
for(int i=0; i<traces.length; i++){
if(!traces[i].getClassName().equals(Debug.class.getName())){
trace = traces[i];
break;
}
}
String msg = message + " # "
+ trace.getClassName() + "."
+ trace.getMethodName();
if(trace.getFileName() != null){
msg += "(" + trace.getFileName() + ":"
+ trace.getLineNumber() + ")";
}else
msg += "(No detailed source file information)";
Date date = new Date();
msg = "[" + (date.getYear() + 1900) + "/" + (date.getMonth() + 1)
+ "/" + date.getDate() + " " + date.getHours() + ":"
+ date.getMinutes() + ":" + date.getSeconds() + "] " + msg;
return msg;
}
public static void info(String message){
printMessage("[INFO]" + buildLogMessage(message));
}
public static void warning(String message){
printMessage("[WARNING]" + buildLogMessage(message));
}
public static void error(String message){
printMessage("[ERROR]" + buildLogMessage(message));
}
private static void printMessage(String message){
System.out.println(message);
}
}
:-)其实就这个简单。如果平时注意观察Exception类的printStackTrace()方法的输出结果,你也能想到。
public class Debug {
private static String buildLogMessage(String message){
StackTraceElement trace = null;
StackTraceElement traces[] = (new Throwable()).getStackTrace();
for(int i=0; i<traces.length; i++){
if(!traces[i].getClassName().equals(Debug.class.getName())){
trace = traces[i];
break;
}
}
String msg = message + " # "
+ trace.getClassName() + "."
+ trace.getMethodName();
if(trace.getFileName() != null){
msg += "(" + trace.getFileName() + ":"
+ trace.getLineNumber() + ")";
}else
msg += "(No detailed source file information)";
Date date = new Date();
msg = "[" + (date.getYear() + 1900) + "/" + (date.getMonth() + 1)
+ "/" + date.getDate() + " " + date.getHours() + ":"
+ date.getMinutes() + ":" + date.getSeconds() + "] " + msg;
return msg;
}
public static void info(String message){
printMessage("[INFO]" + buildLogMessage(message));
}
public static void warning(String message){
printMessage("[WARNING]" + buildLogMessage(message));
}
public static void error(String message){
printMessage("[ERROR]" + buildLogMessage(message));
}
private static void printMessage(String message){
System.out.println(message);
}
}
:-)其实就这个简单。如果平时注意观察Exception类的printStackTrace()方法的输出结果,你也能想到。