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