Java日志工具中获取文件信息的原理

    技术2022-05-11  46

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

    最新回复(0)