問題的由來
使用過 Log4J 的朋友應該有這樣酷的體會,通過修改配置文件可以很方便得實現對應用程序的日志行為進行定義,而這些都不需要修改任何的應用程序代碼。也許你會說,這些在 Java 中是很容易實現的(使用 classforname 就可以很容易實現了)。
但是對于使用 C++ 來進行日常開發的朋友,如果要實現這樣的功能又如何來做呢?因為 C++ 語言本身并不支持這樣的通過讀取配置文件動態創建對象的功能。
在 Log4Cplus ? 中,使用 C++ 來這種動態配置生成對象的功能,它是怎么實現呢?要知道 C++ 可沒有類似于 java 的 class loader 以及 reflection 機制,看來需要自己動手來實現通過讀取配置產生合適的 logger appender 對象了。
好在 Log4Cplus 是一個為 C++ 開發的開源 logger 庫,它實現了一個 C++ 版的 Log4J 。我們可以通過分析它來探究一下 C++ 實現讀取配置文件動態創建對象實現原理。 ?
分析功能,通過讀取配置文件后獲得需要加載的信息內容,然后通過相關對象實例模塊來實現對象實例化操作。
初步分析 , 系統通過讀取配置文件來負責加載相關的類實例 , 因此分析可以從配置模塊內部入手 , 實現基本的初始化分析。
通過分析源代碼目錄發現與系統配置相關的對象有以下幾部分內容
Properties
PropertyConfigurator
BasicConfigurator
/SPAN>
重點分析 PropertyConfigurator 中的相關代碼模塊。
下面將結合 PropertyConfigurator 中的實例來進行分析
— 如何實現 Appender 的動態可配置功能
-- 需要分析方法實現
--- initializeLog4cplus ();
--- configureAppenders ();
--- configureLoggers ();
--- configureAdditivity ();
?


