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









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





















這兒我們發現了一個值得關注的類 LogRecord ,從名字上猜應該是和日志信息有關的一個類。我們來看一下它的Javadoc中的描述














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