主要是通过实例化一个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()方法的输出结果,你也能想到。