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