如何獲取call stack(調(diào)用棧)信息——之一
我們中的大多數(shù)人每天都會面對logging API,JDK1.4中的Logger, Log4j等,從他們生成的log文件中,我們可以知道日志產(chǎn)生的第一現(xiàn)場信息,比如源文件名,全限定類名,當(dāng)前方法名,以及記錄日志是源代碼中第幾行等,那有沒有考慮過這些信息是如何獲取的呢?我們先來看一段代碼









我下面就開始我們的追蹤以查出logging API是如何記錄上面提到的這些metadata的。
這兒以JDK1.4中的logging API為研究對象。
先進入java.util.logging.Logger中,看一下info(String msg)這個方法





















這兒我們發(fā)現(xiàn)了一個值得關(guān)注的類 LogRecord ,從名字上猜應(yīng)該是和日志信息有關(guān)的一個類。我們來看一下它的Javadoc中的描述














從這兒可以看到:注意如果客戶端程序沒有顯式地指定源方法名和源類名,則LogRecord 類將通過分析 call stack(調(diào)用棧)來自動提取這些信息(方法getSourceMethodname和方法getSourceClassName),我們已經(jīng)走在正確的道路上了,繼續(xù)追查getSourceMethodname()…………
(未完)
posted on 2005-03-13 17:58 carob 閱讀(1646) 評論(0) 編輯 收藏 所屬分類: Reflection